艾志二期薪酬二开

This commit is contained in:
Harryxzy 2025-03-17 15:19:49 +08:00
parent f57ca94900
commit 2c5e4a9d34
38 changed files with 1507 additions and 29 deletions

227
hs_err_pid30284.log Normal file
View File

@ -0,0 +1,227 @@
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 266338304 bytes for G1 virtual space
# Possible reasons:
# The system is out of physical RAM or swap space
# The process is running with CompressedOops enabled, and the Java Heap may be blocking the growth of the native heap
# Possible solutions:
# Reduce memory load on the system
# Increase physical memory or swap space
# Check if swap backing store is full
# Decrease Java heap size (-Xmx/-Xms)
# Decrease number of Java threads
# Decrease Java thread stack sizes (-Xss)
# Set larger code cache with -XX:ReservedCodeCacheSize=
# JVM is running with Zero Based Compressed Oops mode in which the Java heap is
# placed in the first 32GB address space. The Java Heap base address is the
# maximum limit for the native heap growth. Please use -XX:HeapBaseMinAddress
# to set the Java Heap base and to place the Java Heap above 32GB virtual address.
# This output file may be truncated or incomplete.
#
# Out of Memory Error (os_windows.cpp:3760), pid=30284, tid=21544
#
# JRE version: (17.0.5+1) (build )
# Java VM: OpenJDK 64-Bit Server VM (17.0.5+1-b653.25, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, windows-amd64)
# No core dump will be written. Minidumps are not enabled by default on client versions of Windows
#
--------------- S U M M A R Y ------------
Command Line: git4idea.http.GitAskPassApp Username for 'http://221.226.25.34:3000':
Host: 11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz, 8 cores, 15G, Windows 11 , 64 bit Build 22621 (10.0.22621.4830)
Time: Mon Feb 24 15:33:51 2025 Windows 11 , 64 bit Build 22621 (10.0.22621.4830) elapsed time: 0.020249 seconds (0d 0h 0m 0s)
--------------- T H R E A D ---------------
Current thread (0x000001b6ee9a34a0): JavaThread "Unknown thread" [_thread_in_vm, id=21544, stack(0x0000009c6f900000,0x0000009c6fa00000)]
Stack: [0x0000009c6f900000,0x0000009c6fa00000]
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [jvm.dll+0x6830ca]
V [jvm.dll+0x83f4c4]
V [jvm.dll+0x840c6e]
V [jvm.dll+0x8412d3]
V [jvm.dll+0x2490b5]
V [jvm.dll+0x67ff99]
V [jvm.dll+0x6744aa]
V [jvm.dll+0x308f2b]
V [jvm.dll+0x3103e6]
V [jvm.dll+0x36013e]
V [jvm.dll+0x36036f]
V [jvm.dll+0x2df018]
V [jvm.dll+0x2dff84]
V [jvm.dll+0x810d91]
V [jvm.dll+0x36df31]
V [jvm.dll+0x7f028c]
V [jvm.dll+0x3f0cbf]
V [jvm.dll+0x3f2801]
C [jli.dll+0x526b]
C [ucrtbase.dll+0x29333]
C [KERNEL32.DLL+0x1259d]
C [ntdll.dll+0x5af38]
--------------- P R O C E S S ---------------
Threads class SMR info:
_java_thread_list=0x00007fffe27c8f98, length=0, elements={
}
Java Threads: ( => current thread )
Other Threads:
0x000001b6eea0e1c0 GCTaskThread "GC Thread#0" [stack: 0x0000009c6fa00000,0x0000009c6fb00000] [id=18760]
0x000001b6eea1ee90 ConcurrentGCThread "G1 Main Marker" [stack: 0x0000009c6fb00000,0x0000009c6fc00000] [id=25016]
0x000001b6eea1f8a0 ConcurrentGCThread "G1 Conc#0" [stack: 0x0000009c6fc00000,0x0000009c6fd00000] [id=21972]
[error occurred during error reporting (printing all threads), id 0xc0000005, EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007fffe1f7fbd7]
VM state: not at safepoint (not fully initialized)
VM Mutex/Monitor currently owned by a thread: ([mutex/lock_event])
[0x000001b6ee99fba0] Heap_lock - owner thread: 0x000001b6ee9a34a0
Heap address: 0x0000000702600000, size: 4058 MB, Compressed Oops mode: Zero based, Oop shift amount: 3
CDS archive(s) mapped at: [0x0000000000000000-0x0000000000000000-0x0000000000000000), size 0, SharedBaseAddress: 0x0000000800000000, ArchiveRelocationMode: 0.
Narrow klass base: 0x0000000000000000, Narrow klass shift: 0, Narrow klass range: 0x0
GC Precious Log:
<Empty>
Heap:
garbage-first heap total 0K, used 0K [0x0000000702600000, 0x0000000800000000)
region size 2048K, 0 young (0K), 0 survivors (0K)
[error occurred during error reporting (printing heap information), id 0xc0000005, EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007fffe236cd59]
GC Heap History (0 events):
No events
Dll operation events (1 events):
Event: 0.013 Loaded shared library C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.4\jbr\bin\java.dll
Deoptimization events (0 events):
No events
Classes unloaded (0 events):
No events
Classes redefined (0 events):
No events
Internal exceptions (0 events):
No events
VM Operations (0 events):
No events
Events (0 events):
No events
Dynamic libraries:
0x00007ff6c4cb0000 - 0x00007ff6c4cba000 C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.4\jbr\bin\java.exe
0x00007ff860150000 - 0x00007ff860367000 C:\WINDOWS\SYSTEM32\ntdll.dll
0x00007ff85df50000 - 0x00007ff85e014000 C:\WINDOWS\System32\KERNEL32.DLL
0x00007ff85d600000 - 0x00007ff85d9d0000 C:\WINDOWS\System32\KERNELBASE.dll
0x00007ff85d9d0000 - 0x00007ff85dae1000 C:\WINDOWS\System32\ucrtbase.dll
0x00007ff800850000 - 0x00007ff800867000 C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.4\jbr\bin\jli.dll
0x00007ff819b90000 - 0x00007ff819bab000 C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.4\jbr\bin\VCRUNTIME140.dll
0x00007ff85f590000 - 0x00007ff85f73e000 C:\WINDOWS\System32\USER32.dll
0x00007ff850110000 - 0x00007ff8503a2000 C:\WINDOWS\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.22621.4830_none_270fe7d773858e80\COMCTL32.dll
0x00007ff85d530000 - 0x00007ff85d556000 C:\WINDOWS\System32\win32u.dll
0x00007ff85fbb0000 - 0x00007ff85fbd9000 C:\WINDOWS\System32\GDI32.dll
0x00007ff85dd20000 - 0x00007ff85de3b000 C:\WINDOWS\System32\gdi32full.dll
0x00007ff85dea0000 - 0x00007ff85df47000 C:\WINDOWS\System32\msvcrt.dll
0x00007ff85d560000 - 0x00007ff85d5fa000 C:\WINDOWS\System32\msvcp_win.dll
0x00007ff85de50000 - 0x00007ff85de81000 C:\WINDOWS\System32\IMM32.DLL
0x00007ff819b80000 - 0x00007ff819b8c000 C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.4\jbr\bin\vcruntime140_1.dll
0x00007fffddac0000 - 0x00007fffddb4d000 C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.4\jbr\bin\msvcp140.dll
0x00007fffe1c90000 - 0x00007fffe28fb000 C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.4\jbr\bin\server\jvm.dll
0x00007ff85e140000 - 0x00007ff85e1f1000 C:\WINDOWS\System32\ADVAPI32.dll
0x00007ff85feb0000 - 0x00007ff85ff57000 C:\WINDOWS\System32\sechost.dll
0x00007ff85d480000 - 0x00007ff85d4a8000 C:\WINDOWS\System32\bcrypt.dll
0x00007ff85e2e0000 - 0x00007ff85e3f4000 C:\WINDOWS\System32\RPCRT4.dll
0x00007ff84b2e0000 - 0x00007ff84b2e9000 C:\WINDOWS\SYSTEM32\WSOCK32.dll
0x00007ff853d40000 - 0x00007ff853d4a000 C:\WINDOWS\SYSTEM32\VERSION.dll
0x00007ff856ae0000 - 0x00007ff856b14000 C:\WINDOWS\SYSTEM32\WINMM.dll
0x00007ff85f740000 - 0x00007ff85f7b1000 C:\WINDOWS\System32\WS2_32.dll
0x00007ff85c400000 - 0x00007ff85c418000 C:\WINDOWS\SYSTEM32\kernel.appcore.dll
0x00007fffe8470000 - 0x00007fffe847a000 C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.4\jbr\bin\jimage.dll
0x00007ff85aa50000 - 0x00007ff85ac82000 C:\WINDOWS\SYSTEM32\DBGHELP.DLL
0x00007ff85f820000 - 0x00007ff85fbb0000 C:\WINDOWS\System32\combase.dll
0x00007ff85e200000 - 0x00007ff85e2d7000 C:\WINDOWS\System32\OLEAUT32.dll
0x00007ff8523d0000 - 0x00007ff852402000 C:\WINDOWS\SYSTEM32\dbgcore.DLL
0x00007ff85d400000 - 0x00007ff85d47b000 C:\WINDOWS\System32\bcryptPrimitives.dll
0x00007fffe1c60000 - 0x00007fffe1c85000 C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.4\jbr\bin\java.dll
dbghelp: loaded successfully - version: 4.0.5 - missing functions: none
symbol engine: initialized successfully - sym options: 0x614 - pdb path: .;C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.4\jbr\bin;C:\WINDOWS\SYSTEM32;C:\WINDOWS\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.22621.4830_none_270fe7d773858e80;C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.4\jbr\bin\server
VM Arguments:
java_command: git4idea.http.GitAskPassApp Username for 'http://221.226.25.34:3000':
java_class_path (initial): C:/Program Files/JetBrains/IntelliJ IDEA 2022.1.4/plugins/vcs-git/lib/git4idea-rt.jar;C:/Program Files/JetBrains/IntelliJ IDEA 2022.1.4/lib/externalProcess-rt.jar;C:/Program Files/JetBrains/IntelliJ IDEA 2022.1.4/lib/app.jar;C:/Program Files/JetBrains/IntelliJ IDEA 2022.1.4/lib/3rd-party-rt.jar
Launcher Type: SUN_STANDARD
[Global flags]
intx CICompilerCount = 4 {product} {ergonomic}
uint ConcGCThreads = 2 {product} {ergonomic}
uint G1ConcRefinementThreads = 8 {product} {ergonomic}
size_t G1HeapRegionSize = 2097152 {product} {ergonomic}
uintx GCDrainStackTargetSize = 64 {product} {ergonomic}
size_t InitialHeapSize = 266338304 {product} {ergonomic}
size_t MarkStackSize = 4194304 {product} {ergonomic}
size_t MaxHeapSize = 4255121408 {product} {ergonomic}
size_t MinHeapDeltaBytes = 2097152 {product} {ergonomic}
size_t MinHeapSize = 8388608 {product} {ergonomic}
uintx NonNMethodCodeHeapSize = 5839372 {pd product} {ergonomic}
uintx NonProfiledCodeHeapSize = 122909434 {pd product} {ergonomic}
uintx ProfiledCodeHeapSize = 122909434 {pd product} {ergonomic}
uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic}
bool SegmentedCodeCache = true {product} {ergonomic}
size_t SoftMaxHeapSize = 4255121408 {manageable} {ergonomic}
bool UseCompressedClassPointers = true {product lp64_product} {ergonomic}
bool UseCompressedOops = true {product lp64_product} {ergonomic}
bool UseG1GC = true {product} {ergonomic}
bool UseLargePagesIndividualAllocation = false {pd product} {ergonomic}
Logging:
Log output configuration:
#0: stdout all=warning uptime,level,tags
#1: stderr all=off uptime,level,tags
Environment Variables:
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_341
CLASSPATH=D:\WEAVER\Resin\lib\resin.jar
PATH=D:\Develop\Git\mingw64\libexec\git-core;D:\Develop\Git\mingw64\libexec\git-core;D:\Develop\Git\mingw64\bin;D:\Develop\Git\usr\bin;C:\Users\Harryxzy\bin;C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn;C:\Program Files\Java\jre1.8.0_341\bin;C:\Program Files\Java\jdk1.8.0_341\bin;D:\Develop\apache-maven-3.8.1\bin;C:\Program Files\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\VMware\VMware Workstation\bin;D:\oracle\product\11.2.0\dbhome_1\bin;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0;C:\WINDOWS\System32\OpenSSH;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn;C:\Program Files\Microsoft SQL Server\100\Tools\Binn;C:\Program Files\Microsoft SQL Server\100\DTS\Binn;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE;C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies;D:\Develop\Git\cmd;C:\Program Files (x86)\NetSarang\Xshell 7;C:\Program Files (x86)\NetSarang\Xftp 7;C:\Program Files\nodejs;C:\Program Files\Docker\Docker\resources\bin;C:\Users\Public\Desktop;D:\MySQL8.0.21\bin;E:\Python\Python313\Scripts;E:\Python\Python313;C:\Program Files\MySQL\MySQL Shell 8.0\bin;C:\Users\Harryxzy\AppData\Local\Microsoft\WindowsApps;D:\Develop\Microsoft VS Code\bin;C:\Users\Harryxzy\AppData\Roaming\npm;C:\Users\Harryxzy\AppData\Local\Programs\Fiddler
USERNAME=Harryxzy
DISPLAY=:0.0
LC_ALL=en_US.UTF-8
TERM=xterm-256color
TMPDIR=C:\Users\Harryxzy\AppData\Local\Temp
OS=Windows_NT
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 140 Stepping 1, GenuineIntel
TMP=C:\Users\Harryxzy\AppData\Local\Temp
TEMP=C:\Users\Harryxzy\AppData\Local\Temp
--------------- S Y S T E M ---------------
OS:
Windows 11 , 64 bit Build 22621 (10.0.22621.4830)
OS uptime: 0 days 6:23 hours
Hyper-V role detected
CPU: total 8 (initial active 8) (4 cores per cpu, 2 threads per core) family 6 model 140 stepping 1 microcode 0xba, cx8, cmov, fxsr, ht, mmx, 3dnowpref, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, lzcnt, tsc, tscinvbit, avx, avx2, aes, erms, clmul, bmi1, bmi2, adx, avx512f, avx512dq, avx512cd, avx512bw, avx512vl, sha, fma, vzeroupper, avx512_vpopcntdq, avx512_vpclmulqdq, avx512_vaes, avx512_vnni, clflush, clflushopt, clwb, avx512_vbmi2, avx512_vbmi, hv
Memory: 4k page, system-wide physical 16226M (407M free)
TotalPageFile size 51523M (AvailPageFile size 207M)
current process WorkingSet (physical memory assigned to process): 11M, peak: 11M
current process commit charge ("private bytes"): 60M, peak: 314M
vm_info: OpenJDK 64-Bit Server VM (17.0.5+1-b653.25) for windows-amd64 JRE (17.0.5+1-b653.25), built on 2023-01-04 by "builduser" with MS VC++ 16.10 / 16.11 (VS2019)
END.

View File

@ -0,0 +1,6 @@
ALTER TABLE hrsa_salary_acct_emp ADD az_approval_status varchar(255) NULL
GO
ALTER TABLE hrsa_salary_acct_emp ADD az_submitted_status varchar(255) NULL
GO

View File

@ -8,7 +8,6 @@ import com.engine.salary.entity.salarysob.param.SalarySobRangeEmpQueryParam;
import com.engine.salary.mapper.datacollection.EmployMapper;
import com.google.common.collect.Lists;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.SqlSession;
import weaver.conn.mybatis.MyBatisFactory;
import weaver.general.BaseBean;
@ -245,6 +244,16 @@ public class EmployBiz extends BaseBean {
}
}
public List<Long> listDepIdByEmpIdAndOpe(Long employeeId, Integer operateId) {
SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession();
try {
EmployMapper mapper = sqlSession.getMapper(EmployMapper.class);
return mapper.listDepIdByEmpIdAndOpe(employeeId, operateId);
} finally {
sqlSession.close();
}
}
public List<Long> listEmpIdByDepId(List<Long> departmentIds) {
SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession();
try {

View File

@ -196,6 +196,29 @@ public class SalaryArchiveItemBiz {
}
}
public List<SalaryItemAdjustRecordListDTO> salaryItemAdjustRecordTime(SalaryItemAdjustRecordQueryParam queryParam, List<Long> salaryItemIds) {
SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession();
try {
SalaryArchiveItemMapper mapper = sqlSession.getMapper(SalaryArchiveItemMapper.class);
List<Long> salaryArchiveIds = queryParam.getSalaryArchiveIds();
if (CollectionUtils.isEmpty(salaryArchiveIds)) {
List<SalaryItemAdjustRecordListDTO> salaryItemAdjustRecordListDTOS = mapper.salaryItemAdjustRecordList(queryParam, salaryItemIds);
return salaryItemAdjustRecordListDTOS;
} else {
List<SalaryItemAdjustRecordListDTO> salaryItemAdjustRecordListDTOS = new ArrayList<>();
List<List<Long>> salaryArchiveIdsPartition = Lists.partition(salaryArchiveIds, 500);
salaryArchiveIdsPartition.forEach(l -> {
queryParam.setSalaryArchiveIds(l);
salaryItemAdjustRecordListDTOS.addAll(mapper.salaryItemAdjustRecordList(queryParam, salaryItemIds));
});
return salaryItemAdjustRecordListDTOS;
}
} finally {
sqlSession.close();
}
}
public void deleteBySalaryArchiveId(List<Long> salaryArchiveIds) {
SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession();
try {

View File

@ -50,7 +50,8 @@ public class SalaryAcctRecordBO {
List<TaxAgentPO> taxAgentPOS,
List<Long> needApprovalSalarySobIds,
boolean approvalCanFile,
boolean approvalCanReCalc) {
boolean approvalCanReCalc,
boolean canManage) {
if (CollectionUtils.isEmpty(salaryAcctRecordPOS)) {
return Collections.emptyList();
}
@ -89,6 +90,9 @@ public class SalaryAcctRecordBO {
btnList.add(new WeaTableOperate("重新核算", null, "4"));
}
}
if (!canManage) {
btnList = btnList.stream().filter(btn -> btn.getIndex().equals("3") || btn.getIndex().equals("0")).collect(Collectors.toList());
}
return SalaryAcctRecordListDTO.builder()
.id(salaryAcctRecordPO.getId())
.salarySobName(Optional.ofNullable(salarySobPO).map(SalarySobPO::getName).orElse(StringUtils.EMPTY))

View File

@ -23,6 +23,7 @@ import com.engine.salary.entity.taxagent.po.TaxAgentPO;
import com.engine.salary.enums.AccountTypeEnum;
import com.engine.salary.enums.SalaryValueTypeEnum;
import com.engine.salary.enums.UserStatusEnum;
import com.engine.salary.enums.salaryaccounting.AZSalaryAcctEmployeeStatusEnum;
import com.engine.salary.enums.salaryaccounting.LockStatusEnum;
import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum;
import com.engine.salary.util.SalaryEntityUtil;
@ -334,6 +335,9 @@ public class SalaryAcctResultBO {
map.put("consolidatedTaxation", StringUtils.isNotEmpty(taxAgentName) && consolidatedTaxSalaryAcctEmpIds.contains(e.getId()));
// 个税扣缴义务人的字段类型
map.put("taxAgentName" + DATA_TYPE_SUFFIX, SalaryDataTypeEnum.STRING.getValue());
// 审核状态
map.put("submittedStatus", StringUtils.isBlank(e.getAzSubmittedStatus()) ? AZSalaryAcctEmployeeStatusEnum.NOT_SUBMITTED.getDefaultLabel() : AZSalaryAcctEmployeeStatusEnum.getDefaultLabelByValue(e.getAzSubmittedStatus()));
map.put("approvalStatus", StringUtils.isBlank(e.getAzApprovalStatus()) ? AZSalaryAcctEmployeeStatusEnum.NOT_APPROVED.getDefaultLabel() : AZSalaryAcctEmployeeStatusEnum.getDefaultLabelByValue(e.getAzApprovalStatus()));
// 公式详情
customParameters.putAll(customBackCalcParameters);
map.put("customParameters", customParameters);

View File

@ -0,0 +1,29 @@
package com.engine.salary.entity.salaryacct.param;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Set;
/**
* 艾志 审批状态修改
* <p>Copyright: Copyright (c) 2042</p>
* <p>Company: 泛微软件</p>
*
* @author xzy
* @version 1.0
**/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class SalaryAcctEmpAzApprovalStatusParam {
//薪资核算记录的id
private Long salaryAcctRecordId;
// 薪资核算人员的id
private Set<Long> acctEmpIds;
}

View File

@ -173,6 +173,12 @@ public class SalaryAcctEmployeePO {
*/
private Integer accountType;
// 艾志提交状态
private String azSubmittedStatus;
// 艾志审批状态
private String azApprovalStatus;
//--------条件----------

View File

@ -41,6 +41,8 @@ public class SalaryItemAdjustRecordQueryParam extends BaseQueryParam {
//员工id
private Long employeeId;
private List<Long> employeeIds;
//部门id
private List<Long> departmentIds;
@ -67,4 +69,6 @@ public class SalaryItemAdjustRecordQueryParam extends BaseQueryParam {
//备注
private String description;
private boolean export;
}

View File

@ -0,0 +1,63 @@
package com.engine.salary.enums.salaryaccounting;
import com.engine.salary.enums.BaseEnum;
import java.util.Arrays;
import java.util.Objects;
import java.util.Optional;
/**
* @ClassName AZSalaryAcctEmployeeStatusEnum
* @author Harryxzy
* @date 2025/3/12 16:53
* @description 艾志人员审批状态
*/
public enum AZSalaryAcctEmployeeStatusEnum implements BaseEnum<String> {
NOT_SUBMITTED("NOT_SUBMITTED", "未提交", 0),
SUBMITTED("SUBMITTED", "已提交", 0),
NOT_APPROVED("NOT_APPROVED", "未审核", 0),
APPROVED("APPROVED", "已审核", 0),
;
private String value;
private String defaultLabel;
private int labelId;
AZSalaryAcctEmployeeStatusEnum(String value, String defaultLabel, int labelId) {
this.value = value;
this.defaultLabel = defaultLabel;
this.labelId = labelId;
}
@Override
public String getValue() {
return value;
}
@Override
public Integer getLabelId() {
return labelId;
}
@Override
public String getDefaultLabel() {
return defaultLabel;
}
public static AZSalaryAcctEmployeeStatusEnum parseByValue(String value) {
for (AZSalaryAcctEmployeeStatusEnum salaryAcctRecordStatusEnum : AZSalaryAcctEmployeeStatusEnum.values()) {
if (Objects.equals(salaryAcctRecordStatusEnum.getValue(), value)) {
return salaryAcctRecordStatusEnum;
}
}
return null;
}
public static String getDefaultLabelByValue(String value) {
Optional<AZSalaryAcctEmployeeStatusEnum> optional = Arrays.stream(AZSalaryAcctEmployeeStatusEnum.values()).filter(r -> r.getValue().equals(value)).findFirst();
return optional.isPresent() ? optional.get().defaultLabel : "";
}
}

View File

@ -25,7 +25,12 @@ public enum SalaryArchiveItemAdjustReasonEnum implements BaseEnum<String> {
POSITION_OR_SALARY_ADJUSTMENT("POSITION_OR_SALARY_ADJUSTMENT", "调岗调薪", 85986),
DIMISSION("DIMISSION", "离职", 85902),
OTHER("OTHER", "其他", 84500),
INIT("INIT", "初始化", 85903);
INIT("INIT", "初始化", 85903),
JTEDBG("JTEDBG", "交通额度变更", 0),
TXEDBG("TXEDBG", "通讯额度变更", 0),
GWEDBG("GWEDBG", "高温额度变更", 0),
CBEDBG("CBEDBG", "餐补额度变更", 0)
;
private String value;

View File

@ -743,6 +743,7 @@
ORDER BY t1.effective_time DESC,t1.id DESC
</select>
<sql id="salaryItemAdjustRecordColumn">
t1.id,
t1.employee_id,

View File

@ -30,6 +30,8 @@ public interface EmployMapper {
*/
List<DataCollectionEmployee> listEmployee();
List<DataCollectionEmployee> listByJobtitle(@Param("jobtitleIds") List<Long> jobtitleIds);
/**
* 单表查询
* @param ids
@ -158,6 +160,8 @@ public interface EmployMapper {
*/
List<Long> listDepIdByEmpId(Long employeeId);
List<Long> listDepIdByEmpIdAndOpe(@Param("employeeId") Long employeeId,@Param("operateId") Integer operateId);
/**
* 艾志二开查询部门id下的人员id
*/

View File

@ -628,6 +628,14 @@
where d.ry = #{employeeId}
</select>
<select id="listDepIdByEmpIdAndOpe" resultType="java.lang.Long">
select bm
from uf_rsqx d
where d.ry = #{employeeId}
and tjqr = #{operateId}
</select>
<select id="listEmpIdByDepId" resultType="java.lang.Long">
select e.id
from hrmresource e
@ -699,4 +707,39 @@
from hrmjobcall job
where job.id = #{jobCallId}
</select>
<select id="listByJobtitle" resultType="com.engine.salary.entity.datacollection.DataCollectionEmployee">
select e.id as employeeId,
e.lastname as username,
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,
e.mobile as mobile,
e.status as status,
e.workcode as workcode,
e.sex as sex,
e.email as email,
e.telephone as telephone,
e.jobcall as jobcallId,
job.name as jobcall,
e.birthday as birthday,
e.certificatenum as idNo,
e.enddate as dismissdate,
e.workyear,
e.accounttype as accountType,
e.companyworkyear
from hrmresource e
left join hrmdepartment d on e.departmentid = d.id
left join hrmjobtitles c on e.jobtitle = c.id
left join HrmSubCompany sc on e.SUBCOMPANYID1=sc.id
left join hrmjobcall job on e.jobcall=job.id
where e.status not in (7)
AND jobtitle in
<foreach collection="jobtitleIds" open="(" item="jobtitleId" separator="," close=")">
#{jobtitleId}
</foreach>
</select>
</mapper>

View File

@ -8,6 +8,7 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO;
import org.apache.ibatis.annotations.Param;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Set;
@ -132,4 +133,11 @@ public interface SalaryAcctEmployeeMapper {
void updateIgnoreNull(@Param("salaryAcctEmployeePO")SalaryAcctEmployeePO salaryAcctEmployeePO);
void lock(SalaryAcctEmployeePO salaryAcctEmployeePO);
Integer updateAzApprovalStatusByIds(@Param("status") String status, @Param("ids")List<Long> salaryAcctEmpIds, @Param("now") Date date);
Integer updateAzSubmitStatusByIds(@Param("status") String status, @Param("ids")List<Long> salaryAcctEmpIds, @Param("now") Date date);
List<Long> listSalaryAcctRecordIdsContainsDepIds(@Param("depIds") List<String> depIds, @Param("salaryAcctRecordIds") List<Long> salaryAcctRecordIds);
}

View File

@ -62,7 +62,9 @@
t.jobcall_id,
t.status,
t.lock_items,
t.account_type
t.account_type,
t.az_approval_status,
t.az_submitted_status
</sql>
<sql id="emp1Column">
@ -70,7 +72,7 @@
.
id
, emp1.salary_acct_record_id, emp1.salary_sob_id, emp1.employee_id, emp1.tax_agent_id, emp1.salary_month,
emp1.creator, emp1.create_time, emp1.update_time, emp1.delete_type, emp1.tenant_key,emp1.employee_type
emp1.creator, emp1.create_time, emp1.update_time, emp1.delete_type, emp1.tenant_key,emp1.employee_type,emp1.az_approval_status
</sql>
<insert id="batchInsert">
@ -1034,6 +1036,8 @@
<result column="status" property="status"/>
<result column="lock_items" property="lockItems" typeHandler="com.engine.salary.handle.SalaryListTypeHandler"/>
<result column="account_type" property="accountType"/>
<result column="az_approval_status" property="azApprovalStatus"/>
<result column="az_submitted_status" property="azSubmittedStatus"/>
</resultMap>
<!-- 表字段 -->
@ -1064,6 +1068,8 @@
, t.status
, t.lock_items
, t.account_type
, t.az_approval_status
, t.az_submitted_status
</sql>
@ -1218,6 +1224,19 @@
AND hed.declare_status IN (4)
)
</select>
<select id="listSalaryAcctRecordIdsContainsDepIds" resultType="java.lang.Long">
select distinct salary_acct_record_id
from hrsa_salary_acct_emp
where delete_type=0
and department_id in
<foreach collection="depIds" item="depId" open="(" separator="," close=")">
#{depId}
</foreach>
and salary_acct_record_id in
<foreach collection="salaryAcctRecordIds" item="salaryAcctRecordId" open="(" separator="," close=")">
#{salaryAcctRecordId}
</foreach>
</select>
<update id="updateIgnoreNull" parameterType="com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO">
UPDATE hrsa_salary_acct_emp
@ -1294,5 +1313,29 @@
</set>
WHERE id = #{id} AND delete_type = 0
</update>
<update id="updateAzApprovalStatusByIds">
UPDATE hrsa_salary_acct_emp
<set>
az_approval_status = #{status},
update_time = #{now}
</set>
WHERE id IN
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
AND delete_type = 0
</update>
<update id="updateAzSubmitStatusByIds">
UPDATE hrsa_salary_acct_emp
<set>
az_submitted_status = #{status},
update_time = #{now}
</set>
WHERE id IN
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
AND delete_type = 0
</update>
</mapper>

View File

@ -83,4 +83,6 @@ public interface SISchemeService {
List<String> updateSchemeDetail(List<InsuranceSchemeDetailUpdateParam> schemeDetailList);
List<InsuranceSchemePO> listAll();
XSSFWorkbook exportAll(InsuranceSchemeParam insuranceSchemeParam);
}

View File

@ -282,4 +282,14 @@ public interface SalaryAcctEmployeeService {
void updateIgnoreNull(SalaryAcctEmployeePO salaryAcctEmployeePO);
void lock(SalaryAcctEmployeePO salaryAcctEmployeePO);
void azSubmit(SalaryAcctEmpAzApprovalStatusParam param);
void azReturn(SalaryAcctEmpAzApprovalStatusParam param);
void azApprove(SalaryAcctEmpAzApprovalStatusParam param);
void azReApprove(SalaryAcctEmpAzApprovalStatusParam param);
List<Long> listSalaryAcctRecordIdsContainsDepIds(List<String> depWithChildList, List<Long> salaryAcctRecordIds);
}

View File

@ -104,6 +104,8 @@ public interface SalaryArchiveItemService {
*/
List<SalaryItemAdjustRecordListDTO> salaryItemAdjustRecordList(SalaryItemAdjustRecordQueryParam queryParam, List<Long> salaryItemIds);
List<SalaryItemAdjustRecordListDTO> salaryItemAdjustRecordTime(SalaryItemAdjustRecordQueryParam queryParam, List<Long> salaryItemIds);
/**
* 导出薪资项目的调整记录列表
*
@ -173,4 +175,8 @@ public interface SalaryArchiveItemService {
* @return
*/
List<SalaryArchiveItemPO> listByArchiveIdAndEffectiveTime(List<Long> salaryArchiveIds, LocalDateRange dateRange);
Map<String, Object> azAdjustList(SalaryItemAdjustRecordQueryParam queryParam);
XSSFWorkbook exportAzAdjustList(SalaryItemAdjustRecordQueryParam queryParam);
}

View File

@ -32,6 +32,8 @@ public interface SalaryEmployeeService {
*/
List<DataCollectionEmployee> listAll(UseEmployeeTypeEnum empType);
List<DataCollectionEmployee> listByJobtitle(List<Long> jobtitleIds);
/**
* 获取报表人员字段
*
@ -191,6 +193,8 @@ public interface SalaryEmployeeService {
*/
List<Long> listDepIdByEmpId(Long employeeId);
List<Long> listDepIdByEmpIdAndOpe(Long currentEmployeeId, Integer operateId);
/**
* 艾志二开查询部门id下的人员id
*/

View File

@ -19,7 +19,6 @@ import com.engine.core.impl.Service;
import com.engine.hrmelog.entity.dto.LoggerContext;
import com.engine.salary.biz.SIArchivesBiz;
import com.engine.salary.biz.SISchemeBiz;
import com.engine.hrmelog.entity.dto.LoggerContext;
import com.engine.salary.cmd.siarchives.SIArchivesTipsCmd;
import com.engine.salary.common.SalaryContext;
import com.engine.salary.config.SalaryElogConfig;
@ -73,7 +72,6 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.BeanUtils;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StopWatch;
import weaver.conn.mybatis.MyBatisFactory;
import weaver.general.BaseBean;

View File

@ -63,6 +63,7 @@ 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.ExcelUtilPlus;
import com.engine.salary.util.page.Column;
import com.engine.salary.util.page.PageInfo;
import com.engine.salary.util.page.SalaryPageUtil;
import com.engine.salary.util.valid.ValidUtil;
@ -80,6 +81,7 @@ import weaver.file.ImageFileManager;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.hrm.company.DepartmentComInfo;
import weaver.wechat.util.Utils;
import java.io.InputStream;
import java.math.BigDecimal;
@ -182,6 +184,10 @@ public class SISchemeServiceImpl extends Service implements SISchemeService {
return MapperProxyFactory.getProxy(EmployMapper.class);
}
public SICategoryService getSICategoryService(User user) {
return ServiceUtil.getService(SICategoryServiceImpl.class, user);
}
@Override
public Map<String, Object> getForm(Map<String, Object> params) {
Map<String, Object> apidatas = new HashMap<>(16);
@ -3064,4 +3070,120 @@ public class SISchemeServiceImpl extends Service implements SISchemeService {
}
/*****以上代码为SISchemeBiz中方法逻辑迁移旨在减少Biz类的使用*****/
@Override
public XSSFWorkbook exportAll(InsuranceSchemeParam queryParam) {
// 获取所有的方案列表
SalaryAssert.notNull(queryParam.getWelfareTypeEnum(), SalaryI18nUtil.getI18nLabel(84026, "参数错误"));
queryParam.setWelfareType(queryParam.getWelfareTypeEnum().getValue());
Long currentEmployeeId = (long) user.getUID();
List<InsuranceSchemePO> insuranceSchemePOS;
Boolean needAuth = getTaxAgentService().isNeedAuth(currentEmployeeId);
if (needAuth) {
insuranceSchemePOS = getInsuranceSchemeMapper().list(queryParam);
Boolean isAdminEnable = getTaxAgentService().isAdminEnable((long) user.getUID());
if (isAdminEnable) {
//管理员
Collection<TaxAgentPO> taxAgentPOS = getTaxAgentService().listAllTaxAgents(currentEmployeeId);
List<Long> authTaxAgentIds = SalaryEntityUtil.properties(taxAgentPOS, TaxAgentPO::getId, Collectors.toList());
insuranceSchemePOS = insuranceSchemePOS.stream().filter(po -> {
String taxAgentIdsStr = po.getTaxAgentIds();
List<Long> taxAgentIds = new ArrayList<>();
if (StringUtils.isNotBlank(taxAgentIdsStr)) {
taxAgentIds = Arrays.stream(taxAgentIdsStr.split(",")).map(Long::valueOf).collect(Collectors.toList());
}
return StringUtils.isBlank(po.getSharedType()) || SharedTypeEnum.PUBLIC.getValue().equals(po.getSharedType()) || (SharedTypeEnum.PRIVATE.getValue().equals(po.getSharedType()) && SalaryEntityUtil.judgeIntersection(authTaxAgentIds, taxAgentIds));
}).collect(Collectors.toList());
} else {
//普通用户
insuranceSchemePOS = new ArrayList<>();
}
} else {
insuranceSchemePOS = getInsuranceSchemeMapper().list(queryParam);
}
// 获取方案对应险种信息
LinkedHashSet<String> detailProKeySet = new LinkedHashSet<>();
LinkedHashSet<String> detailFixedKeySet = new LinkedHashSet<>();
List<Map<String, Object>> dataList = new ArrayList<>();
insuranceSchemePOS.forEach(scheme -> {
List<InsuranceSchemeDetailPO> schemeDetailList = listByPrimaryId(scheme.getId());
// 公司
Map<String, Object> companyResultMap = new HashMap<>();
List<InsuranceSchemeDetailPO> companyDetails = schemeDetailList.stream().filter(po -> po.getPaymentScope().equals(PaymentScopeEnum.SCOPE_COMPANY.getValue()) && po.getIsPayment().equals(IsPaymentEnum.YES.getValue())).collect(Collectors.toList());
// 比例
final BigDecimal[] companyTotalProp = {new BigDecimal("0")};
List<InsuranceSchemeDetailPO> companyProportionDetails = companyDetails.stream().filter(detail -> StringUtils.isNotBlank(detail.getPaymentProportion())).collect(Collectors.toList());
detailProKeySet.addAll(companyProportionDetails.stream().map(po -> po.getInsuranceId().toString()).collect(Collectors.toSet()));
companyProportionDetails.stream().forEach(detail -> {
companyResultMap.put(detail.getInsuranceId()+"_prop", detail.getPaymentProportion() + "%");
companyTotalProp[0] = companyTotalProp[0].add(NumberUtils.isCreatable(detail.getPaymentProportion()) ? new BigDecimal(detail.getPaymentProportion()) : BigDecimal.ZERO);
});
// 固定值
List<InsuranceSchemeDetailPO> companyFixedDetails = companyDetails.stream()
.filter(detail -> NumberUtils.isCreatable(detail.getFixedCost()) && new BigDecimal(detail.getFixedCost()).compareTo(new BigDecimal("0")) != 0 )
.collect(Collectors.toList());
detailFixedKeySet.addAll(companyFixedDetails.stream().map(po -> po.getInsuranceId().toString()).collect(Collectors.toSet()));
companyFixedDetails.stream().forEach(detail -> {
companyResultMap.put(detail.getInsuranceId()+"_fixed", detail.getFixedCost());
});
companyResultMap.put("paymentScope", PaymentScopeEnum.SCOPE_COMPANY.getDefaultLabel());
companyResultMap.put("schemeName", scheme.getSchemeName());
companyResultMap.put("totalProportion", companyTotalProp[0].toPlainString());
dataList.add(companyResultMap);
// 个人
final BigDecimal[] personTotalProp = {new BigDecimal("0")};
Map<String, Object> personResultMap = new HashMap<>();
List<InsuranceSchemeDetailPO> personDetails = schemeDetailList.stream().filter(po -> po.getPaymentScope().equals(PaymentScopeEnum.SCOPE_PERSON.getValue()) && po.getIsPayment().equals(IsPaymentEnum.YES.getValue())).collect(Collectors.toList());
// 比例
List<InsuranceSchemeDetailPO> personProportionDetails = personDetails.stream().filter(detail -> StringUtils.isNotBlank(detail.getPaymentProportion())).collect(Collectors.toList());
detailProKeySet.addAll(personProportionDetails.stream().map(po -> po.getInsuranceId().toString()).collect(Collectors.toSet()));
personProportionDetails.stream().forEach(detail -> {
personResultMap.put(detail.getInsuranceId()+"_prop", detail.getPaymentProportion() + "%");
personTotalProp[0] = personTotalProp[0].add(NumberUtils.isCreatable(detail.getPaymentProportion()) ? new BigDecimal(detail.getPaymentProportion()) : BigDecimal.ZERO);
});
// 固定值
List<InsuranceSchemeDetailPO> personFixedDetails = personDetails.stream()
.filter(detail -> NumberUtils.isCreatable(detail.getFixedCost()) && new BigDecimal(detail.getFixedCost()).compareTo(new BigDecimal("0")) != 0 )
.collect(Collectors.toList());
detailFixedKeySet.addAll(personFixedDetails.stream().map(po -> po.getInsuranceId().toString()).collect(Collectors.toSet()));
personFixedDetails.stream().forEach(detail -> {
personResultMap.put(detail.getInsuranceId()+"_fixed", detail.getFixedCost());
});
personResultMap.put("paymentScope", PaymentScopeEnum.SCOPE_PERSON.getDefaultLabel());
personResultMap.put("schemeName", scheme.getSchemeName());
personResultMap.put("totalProportion", personTotalProp[0].toPlainString());
dataList.add(personResultMap);
});
// 处理表头
List<Column> columnList = new ArrayList<>();
columnList.add(new Column("方案名称", "schemeName", "schemeName"));
columnList.add(new Column("缴纳对象", "paymentScope", "paymentScope"));
// 获取所有福利小项信息
Map<String, String> categoryIdNameMap = getSICategoryService(user).categoryIdNameMap();
List<String> detailProKeyList = detailProKeySet.stream().sorted((k1, k2) -> {
return Long.valueOf(k1).compareTo(Long.valueOf(k2));
}).collect(Collectors.toList());
detailProKeyList.stream().forEach(insuranceId -> {
String categoryName = categoryIdNameMap.get(insuranceId.toString());
columnList.add(new Column(Utils.null2String(categoryName)+"缴纳比例", insuranceId+"_prop", insuranceId+"_prop"));
});
columnList.add(new Column("合计比例", "totalProportion", "totalProportion"));
detailFixedKeySet.stream().forEach(insuranceId -> {
String categoryName = categoryIdNameMap.get(insuranceId.toString());
columnList.add(new Column(Utils.null2String(categoryName)+"/元", insuranceId+"_fixed", insuranceId+"_fixed"));
});
List<List<Object>> excelSheetData = new ArrayList<>();
excelSheetData.add(columnList.stream().map(column -> column.getTitle()).collect(Collectors.toList()));
for (Map<String, Object> dataMap : dataList) {
List<Object> singleList = new ArrayList<>();
for(Column column : columnList) {
singleList.add(Utils.null2String(dataMap.get(column.getKey())));
}
excelSheetData.add(singleList);
}
return ExcelUtilPlus.genWorkbookV2ForAzSocial(excelSheetData, "社保福利方案");
}
}

View File

@ -21,6 +21,7 @@ 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.OperateTypeEnum;
import com.engine.salary.enums.salaryaccounting.AZSalaryAcctEmployeeStatusEnum;
import com.engine.salary.enums.salaryaccounting.LockStatusEnum;
import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum;
import com.engine.salary.exception.SalaryRunTimeException;
@ -46,6 +47,7 @@ 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 java.util.*;
import java.util.stream.Collectors;
@ -221,6 +223,33 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct
// 分页参数
// 查询薪资核算人员
List<SalaryAcctEmployeePO> salaryAcctEmployeePOS = getSalaryAcctEmployeeMapper().listPage(queryParam);
//艾志二开增加当前登录人拥有的的部门查看权限包含的人员档案列表
List<Long> taxAgentIds = getTaxAgentService(user).listAllTaxAgents(Long.valueOf(user.getUID())).stream().map(TaxAgentPO::getId).collect(Collectors.toList());
List<SalaryAcctEmployeePO> needAuthPage = salaryAcctEmployeePOS.stream().filter(dto -> taxAgentIds.contains(dto.getTaxAgentId())).collect(Collectors.toList());
//查询登录人拥有查看权限的部门
List<Long> depList = getSalaryEmployeeService(user).listDepIdByEmpId((long) user.getUID());
if (depList.size() > 0) {
List<String> depWithChildList = new ArrayList<>();
for (Long depId : depList) {
try {
String depStr = DepartmentComInfo.getAllChildDepartId(depId.toString(), depId.toString());
depWithChildList.addAll(Arrays.stream(depStr.split(",")).collect(Collectors.toList()));
} catch (Exception e) {
e.printStackTrace();
}
}
List<SalaryAcctEmployeePO> depAuthPage = salaryAcctEmployeePOS.stream().filter(f ->
depWithChildList.contains(f.getDepartmentId().toString())
).collect(Collectors.toList());
if (depAuthPage.size() > 0) {
needAuthPage.addAll(depAuthPage);
needAuthPage = needAuthPage.stream().distinct().collect(Collectors.toList());
}
}
salaryAcctEmployeePOS = needAuthPage;
return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(),
salaryAcctEmployeePOS, SalaryAcctEmployeePO.class);
}
@ -267,6 +296,33 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct
} else {
salaryAcctEmployeePOS = listByParam(salaryAcctEmployeeQueryParam);
}
//艾志二开增加当前登录人拥有的的部门查看权限包含的人员档案列表
List<Long> taxAgentIds = getTaxAgentService(user).listAllTaxAgents(Long.valueOf(user.getUID())).stream().map(TaxAgentPO::getId).collect(Collectors.toList());
List<SalaryAcctEmployeePO> needAuthPage = salaryAcctEmployeePOS.stream().filter(dto -> taxAgentIds.contains(dto.getTaxAgentId())).collect(Collectors.toList());
//查询登录人拥有查看权限的部门
List<Long> depList = getSalaryEmployeeService(user).listDepIdByEmpId((long) user.getUID());
if (depList.size() > 0) {
List<String> depWithChildList = new ArrayList<>();
for (Long depId : depList) {
try {
String depStr = DepartmentComInfo.getAllChildDepartId(depId.toString(), depId.toString());
depWithChildList.addAll(Arrays.stream(depStr.split(",")).collect(Collectors.toList()));
} catch (Exception e) {
e.printStackTrace();
}
}
List<SalaryAcctEmployeePO> depAuthPage = salaryAcctEmployeePOS.stream().filter(f ->
depWithChildList.contains(f.getDepartmentId().toString())
).collect(Collectors.toList());
if (depAuthPage.size() > 0) {
needAuthPage.addAll(depAuthPage);
needAuthPage = needAuthPage.stream().distinct().collect(Collectors.toList());
}
}
salaryAcctEmployeePOS = needAuthPage;
return salaryAcctEmployeePOS;
}
@ -320,7 +376,33 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct
}
});
}
return resultList;
//艾志二开增加当前登录人拥有的的部门查看权限包含的人员档案列表
List<Long> taxAgentIds = getTaxAgentService(user).listAllTaxAgents(Long.valueOf(user.getUID())).stream().map(TaxAgentPO::getId).collect(Collectors.toList());
List<SalaryAcctEmployeePO> needAuthPage = resultList.stream().filter(dto -> taxAgentIds.contains(dto.getTaxAgentId())).collect(Collectors.toList());
//查询登录人拥有查看权限的部门
List<Long> depList = getSalaryEmployeeService(user).listDepIdByEmpId((long) user.getUID());
if (depList.size() > 0) {
List<String> depWithChildList = new ArrayList<>();
for (Long depId : depList) {
try {
String depStr = DepartmentComInfo.getAllChildDepartId(depId.toString(), depId.toString());
depWithChildList.addAll(Arrays.stream(depStr.split(",")).collect(Collectors.toList()));
} catch (Exception e) {
e.printStackTrace();
}
}
List<SalaryAcctEmployeePO> depAuthPage = resultList.stream().filter(f ->
depWithChildList.contains(f.getDepartmentId().toString())
).collect(Collectors.toList());
if (depAuthPage.size() > 0) {
needAuthPage.addAll(depAuthPage);
needAuthPage = needAuthPage.stream().distinct().collect(Collectors.toList());
}
}
return needAuthPage;
}
@Override
@ -344,7 +426,32 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct
resultList.add(v);
}
});
return resultList;
//艾志二开增加当前登录人拥有的的部门查看权限包含的人员档案列表
List<Long> taxAgentIds = getTaxAgentService(user).listAllTaxAgents(Long.valueOf(user.getUID())).stream().map(TaxAgentPO::getId).collect(Collectors.toList());
List<SalaryAcctEmployeePO> needAuthPage = resultList.stream().filter(dto -> taxAgentIds.contains(dto.getTaxAgentId())).collect(Collectors.toList());
//查询登录人拥有查看权限的部门
List<Long> depList = getSalaryEmployeeService(user).listDepIdByEmpId((long) user.getUID());
if (depList.size() > 0) {
List<String> depWithChildList = new ArrayList<>();
for (Long depId : depList) {
try {
String depStr = DepartmentComInfo.getAllChildDepartId(depId.toString(), depId.toString());
depWithChildList.addAll(Arrays.stream(depStr.split(",")).collect(Collectors.toList()));
} catch (Exception e) {
e.printStackTrace();
}
}
List<SalaryAcctEmployeePO> depAuthPage = resultList.stream().filter(f ->
depWithChildList.contains(f.getDepartmentId().toString())
).collect(Collectors.toList());
if (depAuthPage.size() > 0) {
needAuthPage.addAll(depAuthPage);
needAuthPage = needAuthPage.stream().distinct().collect(Collectors.toList());
}
}
return needAuthPage;
}
@ -373,6 +480,33 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct
} else {
salaryAcctEmployeePOS = getSalaryAcctEmployeeMapper().listPage4ConsolidatedTax(otherSalaryAcctRecordIds, queryParam);
}
//艾志二开增加当前登录人拥有的的部门查看权限包含的人员档案列表
List<Long> taxAgentIds = getTaxAgentService(user).listAllTaxAgents(Long.valueOf(user.getUID())).stream().map(TaxAgentPO::getId).collect(Collectors.toList());
List<SalaryAcctEmployeePO> needAuthPage = salaryAcctEmployeePOS.stream().filter(dto -> taxAgentIds.contains(dto.getTaxAgentId())).collect(Collectors.toList());
//查询登录人拥有查看权限的部门
List<Long> depList = getSalaryEmployeeService(user).listDepIdByEmpId((long) user.getUID());
if (depList.size() > 0) {
List<String> depWithChildList = new ArrayList<>();
for (Long depId : depList) {
try {
String depStr = DepartmentComInfo.getAllChildDepartId(depId.toString(), depId.toString());
depWithChildList.addAll(Arrays.stream(depStr.split(",")).collect(Collectors.toList()));
} catch (Exception e) {
e.printStackTrace();
}
}
List<SalaryAcctEmployeePO> depAuthPage = salaryAcctEmployeePOS.stream().filter(f ->
depWithChildList.contains(f.getDepartmentId().toString())
).collect(Collectors.toList());
if (depAuthPage.size() > 0) {
needAuthPage.addAll(depAuthPage);
needAuthPage = needAuthPage.stream().distinct().collect(Collectors.toList());
}
}
salaryAcctEmployeePOS = needAuthPage;
return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(),
salaryAcctEmployeePOS, SalaryAcctEmployeePO.class);
}
@ -884,4 +1018,138 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct
public void lock(SalaryAcctEmployeePO salaryAcctEmployeePO) {
getSalaryAcctEmployeeMapper().lock(salaryAcctEmployeePO);
}
@Override
public void azSubmit(SalaryAcctEmpAzApprovalStatusParam param) {
if (CollectionUtils.isEmpty(param.getAcctEmpIds())) {
return;
}
List<SalaryAcctEmployeePO> salaryAcctEmployeePOList = listByIds(param.getAcctEmpIds());
if (CollectionUtils.isEmpty(salaryAcctEmployeePOList) || param.getAcctEmpIds().size() != salaryAcctEmployeePOList.size()) {
throw new SalaryRunTimeException("提交失败,核算人员信息不存在或已被删除,请刷新后重试");
}
List<Long> needSubmitAcctEmpIds = salaryAcctEmployeePOList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(needSubmitAcctEmpIds)) {
// 修改提交状态未已提交
updateAzSubmitStatusByIds(AZSalaryAcctEmployeeStatusEnum.SUBMITTED.getValue(), needSubmitAcctEmpIds);
}
}
@Override
public void azReturn(SalaryAcctEmpAzApprovalStatusParam param) {
if (CollectionUtils.isEmpty(param.getAcctEmpIds())) {
return;
}
List<SalaryAcctEmployeePO> salaryAcctEmployeePOList = listByIds(param.getAcctEmpIds());
if (CollectionUtils.isEmpty(salaryAcctEmployeePOList) || param.getAcctEmpIds().size() != salaryAcctEmployeePOList.size()) {
throw new SalaryRunTimeException("退回失败,核算人员信息不存在或已被删除,请刷新后重试");
}
List<Long> canNotReturnEmployeeIds = salaryAcctEmployeePOList.stream()
.filter(po -> po.getAzSubmittedStatus() == null || !po.getAzSubmittedStatus().equals(AZSalaryAcctEmployeeStatusEnum.SUBMITTED.getValue()))
.map(SalaryAcctEmployeePO::getEmployeeId)
.collect(Collectors.toList());
List<Long> approvedEmployeeIds = salaryAcctEmployeePOList.stream()
.filter(po -> po.getAzApprovalStatus() != null && po.getAzApprovalStatus().equals(AZSalaryAcctEmployeeStatusEnum.APPROVED.getValue()) )
.map(SalaryAcctEmployeePO::getEmployeeId)
.collect(Collectors.toList());
List<Long> needReturnAcctEmpIds = salaryAcctEmployeePOList.stream().filter(po -> !canNotReturnEmployeeIds.contains(po.getEmployeeId()) && !approvedEmployeeIds.contains(po.getEmployeeId())).map(SalaryAcctEmployeePO::getId).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(needReturnAcctEmpIds)) {
// 修改状态未未提交
updateAzSubmitStatusByIds(AZSalaryAcctEmployeeStatusEnum.NOT_SUBMITTED.getValue(), needReturnAcctEmpIds);
}
if (CollectionUtils.isNotEmpty(canNotReturnEmployeeIds)) {
String canNotSubmitEmployeeNames = getSalaryEmployeeService(user).listByIds(canNotReturnEmployeeIds).stream().map(DataCollectionEmployee::getUsername).collect(Collectors.joining(","));
throw new SalaryRunTimeException(canNotSubmitEmployeeNames + "退回失败,提交状态不是已提交");
}
if (CollectionUtils.isNotEmpty(approvedEmployeeIds)) {
String canNotSubmitEmployeeNames = getSalaryEmployeeService(user).listByIds(approvedEmployeeIds).stream().map(DataCollectionEmployee::getUsername).collect(Collectors.joining(","));
throw new SalaryRunTimeException(canNotSubmitEmployeeNames + "退回失败,审批交状态不是未审核");
}
}
@Override
public void azApprove(SalaryAcctEmpAzApprovalStatusParam param) {
if (CollectionUtils.isEmpty(param.getAcctEmpIds())) {
return;
}
List<SalaryAcctEmployeePO> salaryAcctEmployeePOList = listByIds(param.getAcctEmpIds());
if (CollectionUtils.isEmpty(salaryAcctEmployeePOList) || param.getAcctEmpIds().size() != salaryAcctEmployeePOList.size()) {
throw new SalaryRunTimeException("审核失败,核算人员信息不存在或已被删除,请刷新后重试");
}
List<Long> canNotApproveEmployeeIds = salaryAcctEmployeePOList.stream()
.filter(po -> po.getAzSubmittedStatus() == null || !po.getAzSubmittedStatus().equals(AZSalaryAcctEmployeeStatusEnum.SUBMITTED.getValue()))
.map(SalaryAcctEmployeePO::getEmployeeId)
.collect(Collectors.toList());
List<Long> needApprovedAcctEmpIds = salaryAcctEmployeePOList.stream().filter(po -> !canNotApproveEmployeeIds.contains(po.getEmployeeId())).map(SalaryAcctEmployeePO::getId).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(needApprovedAcctEmpIds)) {
// 修改状态未审批
updateAzApprovalStatusByIds(AZSalaryAcctEmployeeStatusEnum.APPROVED.getValue(), needApprovedAcctEmpIds);
}
if (CollectionUtils.isNotEmpty(canNotApproveEmployeeIds)) {
String canNotApprovedEmployeeNames = getSalaryEmployeeService(user).listByIds(canNotApproveEmployeeIds).stream().map(DataCollectionEmployee::getUsername).collect(Collectors.joining(","));
throw new SalaryRunTimeException(canNotApprovedEmployeeNames + "审核失败,提交状态不是已提交");
}
}
@Override
public void azReApprove(SalaryAcctEmpAzApprovalStatusParam param) {
if (CollectionUtils.isEmpty(param.getAcctEmpIds())) {
return;
}
List<SalaryAcctEmployeePO> salaryAcctEmployeePOList = listByIds(param.getAcctEmpIds());
if (CollectionUtils.isEmpty(salaryAcctEmployeePOList) || param.getAcctEmpIds().size() != salaryAcctEmployeePOList.size()) {
throw new SalaryRunTimeException("弃审失败,核算人员信息不存在或已被删除,请刷新后重试");
}
List<Long> canNotReApproveEmployeeIds = salaryAcctEmployeePOList.stream()
.filter(po -> po.getAzApprovalStatus() == null || !po.getAzApprovalStatus().equals(AZSalaryAcctEmployeeStatusEnum.APPROVED.getValue()) )
.map(SalaryAcctEmployeePO::getEmployeeId)
.collect(Collectors.toList());
List<Long> needReApprovedAcctEmpIds = salaryAcctEmployeePOList.stream().filter(po -> !canNotReApproveEmployeeIds.contains(po.getEmployeeId())).map(SalaryAcctEmployeePO::getId).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(needReApprovedAcctEmpIds)) {
// 修改状态未审批
updateAzApprovalStatusByIds(AZSalaryAcctEmployeeStatusEnum.NOT_APPROVED.getValue(), needReApprovedAcctEmpIds);
}
if (CollectionUtils.isNotEmpty(canNotReApproveEmployeeIds)) {
String canNotApprovedEmployeeNames = getSalaryEmployeeService(user).listByIds(canNotReApproveEmployeeIds).stream().map(DataCollectionEmployee::getUsername).collect(Collectors.joining(","));
throw new SalaryRunTimeException(canNotApprovedEmployeeNames + "弃审失败,审核状态不是已审核");
}
}
private Integer updateAzApprovalStatusByIds(String status, List<Long> salaryAcctEmpIds) {
if (CollectionUtils.isNotEmpty(salaryAcctEmpIds)) {
return getSalaryAcctEmployeeMapper().updateAzApprovalStatusByIds(status, salaryAcctEmpIds, new Date());
}
return 0;
}
private Integer updateAzSubmitStatusByIds(String status, List<Long> salaryAcctEmpIds) {
if (CollectionUtils.isNotEmpty(salaryAcctEmpIds)) {
return getSalaryAcctEmployeeMapper().updateAzSubmitStatusByIds(status, salaryAcctEmpIds, new Date());
}
return 0;
}
@Override
public List<Long> listSalaryAcctRecordIdsContainsDepIds(List<String> depIds, List<Long> salaryAcctRecordIds) {
if (CollectionUtils.isEmpty(depIds) || CollectionUtils.isEmpty(salaryAcctRecordIds)) {
return Collections.emptyList();
}
List<List<Long>> partition = Lists.partition(salaryAcctRecordIds, 300);
List<Long> resultList = new ArrayList<>();
partition.forEach(part -> {
resultList.addAll(getSalaryAcctEmployeeMapper().listSalaryAcctRecordIdsContainsDepIds(depIds, part));
});
return resultList;
}
}

View File

@ -72,6 +72,7 @@ import org.springframework.beans.BeanUtils;
import org.springframework.util.StopWatch;
import weaver.file.ImageFileManager;
import weaver.hrm.User;
import weaver.hrm.company.DepartmentComInfo;
import java.io.InputStream;
import java.math.BigDecimal;
@ -195,6 +196,32 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
// 查询薪资核算人员
List<SalaryAcctEmployeePO> salaryAcctEmployees = getSalaryAcctEmployeeService(user).listByParam(queryParam);
//艾志二开增加当前登录人拥有的的部门查看权限包含的人员档案列表
List<Long> taxAgentIds = getTaxAgentService(user).listAllTaxAgents(Long.valueOf(user.getUID())).stream().map(TaxAgentPO::getId).collect(Collectors.toList());
List<SalaryAcctEmployeePO> needAuthPage = salaryAcctEmployees.stream().filter(dto -> taxAgentIds.contains(dto.getTaxAgentId())).collect(Collectors.toList());
//查询登录人拥有查看权限的部门
List<Long> depList = getSalaryEmployeeService(user).listDepIdByEmpId((long) user.getUID());
if (depList.size() > 0) {
List<String> depWithChildList = new ArrayList<>();
for (Long depId : depList) {
try {
String depStr = DepartmentComInfo.getAllChildDepartId(depId.toString(), depId.toString());
depWithChildList.addAll(Arrays.stream(depStr.split(",")).collect(Collectors.toList()));
} catch (Exception e) {
e.printStackTrace();
}
}
List<SalaryAcctEmployeePO> depAuthPage = salaryAcctEmployees.stream().filter(f ->
depWithChildList.contains(f.getDepartmentId().toString())
).collect(Collectors.toList());
if (depAuthPage.size() > 0) {
needAuthPage.addAll(depAuthPage);
needAuthPage = needAuthPage.stream().distinct().collect(Collectors.toList());
}
}
salaryAcctEmployees = needAuthPage;
// 组装数据
List<List<Object>> rows = new ArrayList<>();
rows.add(headerList);
@ -244,6 +271,33 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
// 查询薪资核算人员环比上月减少
List<SalaryAcctEmployeePO> salaryAcctEmployees = getSalaryAcctEmployeeService(user).listByParam4Reduce(queryParam);
//艾志二开增加当前登录人拥有的的部门查看权限包含的人员档案列表
List<Long> taxAgentIds = getTaxAgentService(user).listAllTaxAgents(Long.valueOf(user.getUID())).stream().map(TaxAgentPO::getId).collect(Collectors.toList());
List<SalaryAcctEmployeePO> needAuthPage = salaryAcctEmployees.stream().filter(dto -> taxAgentIds.contains(dto.getTaxAgentId())).collect(Collectors.toList());
//查询登录人拥有查看权限的部门
List<Long> depList = getSalaryEmployeeService(user).listDepIdByEmpId((long) user.getUID());
if (depList.size() > 0) {
List<String> depWithChildList = new ArrayList<>();
for (Long depId : depList) {
try {
String depStr = DepartmentComInfo.getAllChildDepartId(depId.toString(), depId.toString());
depWithChildList.addAll(Arrays.stream(depStr.split(",")).collect(Collectors.toList()));
} catch (Exception e) {
e.printStackTrace();
}
}
List<SalaryAcctEmployeePO> depAuthPage = salaryAcctEmployees.stream().filter(f ->
depWithChildList.contains(f.getDepartmentId().toString())
).collect(Collectors.toList());
if (depAuthPage.size() > 0) {
needAuthPage.addAll(depAuthPage);
needAuthPage = needAuthPage.stream().distinct().collect(Collectors.toList());
}
}
salaryAcctEmployees = needAuthPage;
// 组装数据
List<List<Object>> rows = new ArrayList<>();
rows.add(headerList);
@ -288,6 +342,32 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
// 查询薪资核算人员环比上月增加
List<SalaryAcctEmployeePO> salaryAcctEmployees = getSalaryAcctEmployeeService(user).listByParam4Add(queryParam);
//艾志二开增加当前登录人拥有的的部门查看权限包含的人员档案列表
List<Long> taxAgentIds = getTaxAgentService(user).listAllTaxAgents(Long.valueOf(user.getUID())).stream().map(TaxAgentPO::getId).collect(Collectors.toList());
List<SalaryAcctEmployeePO> needAuthPage = salaryAcctEmployees.stream().filter(dto -> taxAgentIds.contains(dto.getTaxAgentId())).collect(Collectors.toList());
//查询登录人拥有查看权限的部门
List<Long> depList = getSalaryEmployeeService(user).listDepIdByEmpId((long) user.getUID());
if (depList.size() > 0) {
List<String> depWithChildList = new ArrayList<>();
for (Long depId : depList) {
try {
String depStr = DepartmentComInfo.getAllChildDepartId(depId.toString(), depId.toString());
depWithChildList.addAll(Arrays.stream(depStr.split(",")).collect(Collectors.toList()));
} catch (Exception e) {
e.printStackTrace();
}
}
List<SalaryAcctEmployeePO> depAuthPage = salaryAcctEmployees.stream().filter(f ->
depWithChildList.contains(f.getDepartmentId().toString())
).collect(Collectors.toList());
if (depAuthPage.size() > 0) {
needAuthPage.addAll(depAuthPage);
needAuthPage = needAuthPage.stream().distinct().collect(Collectors.toList());
}
}
salaryAcctEmployees = needAuthPage;
// 组装数据
List<List<Object>> rows = new ArrayList<>();
rows.add(headerList);

View File

@ -45,6 +45,7 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import weaver.hrm.User;
import weaver.hrm.company.DepartmentComInfo;
import java.util.*;
import java.util.stream.Collectors;
@ -208,23 +209,58 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe
// 判断是否开启了分权
Boolean needAuth = getTaxAgentService(user).isNeedAuth(currentEmployeeId);
if (needAuth) {
List<SalarySobPO> salarySobPOS = getSalarySobService(user).listByAdmin();
List<Long> salarySobIds = SalaryEntityUtil.properties(salarySobPOS, SalarySobPO::getId, Collectors.toList());
if (CollectionUtils.isEmpty(salarySobIds)) {
return new PageInfo<>();
}
Collection<Long> sobIds = po.getSalarySobIds();
if (CollectionUtils.isNotEmpty(sobIds)) {
salarySobIds = (List<Long>) SalaryEntityUtil.intersectionForList(salarySobIds, sobIds);
}
po.setSalarySobIds(salarySobIds);
}
// Boolean needAuth = getTaxAgentService(user).isNeedAuth(currentEmployeeId);
List<SalarySobPO> salarySobPOS = getSalarySobService(user).listByAdmin();
// if (needAuth) {
// List<Long> salarySobIds = SalaryEntityUtil.properties(salarySobPOS, SalarySobPO::getId, Collectors.toList());
//
// if (CollectionUtils.isEmpty(salarySobIds)) {
// return new PageInfo<>();
// }
// Collection<Long> sobIds = po.getSalarySobIds();
// if (CollectionUtils.isNotEmpty(sobIds)) {
// salarySobIds = (List<Long>) SalaryEntityUtil.intersectionForList(salarySobIds, sobIds);
// }
// po.setSalarySobIds(salarySobIds);
// }
// 查询薪资核算记录
List<SalaryAcctRecordPO> salaryAcctRecordPOS = getSalaryAcctRecordMapper().listSome(po);
if (CollectionUtils.isNotEmpty(salaryAcctRecordPOS)) {
List<Long> salaryAcctRecordIds = salaryAcctRecordPOS.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList());
//艾志二开增加当前登录人拥有的的部门查看权限包含的人员档案列表
List<SalaryAcctRecordPO> needAuthPage = salaryAcctRecordPOS.stream().filter(record -> salarySobPOS.contains(record.getSalarySobId())).collect(Collectors.toList());
//查询登录人拥有查看权限的部门
List<Long> depList = getSalaryEmployeeService(user).listDepIdByEmpId((long) user.getUID());
if (depList.size() > 0) {
List<String> depWithChildList = new ArrayList<>();
for (Long depId : depList) {
try {
String depStr = DepartmentComInfo.getAllChildDepartId(depId.toString(), depId.toString());
depWithChildList.addAll(Arrays.stream(depStr.split(",")).collect(Collectors.toList()));
} catch (Exception e) {
e.printStackTrace();
}
}
// 查询核算人员中是否有这些部门下的核算人员
List<Long> canManageSalaryAcctRecordId = getSalaryAcctEmployeeService(user).listSalaryAcctRecordIdsContainsDepIds(depWithChildList, salaryAcctRecordIds);
List<SalaryAcctRecordPO> depAuthPage = salaryAcctRecordPOS.stream().filter(f ->
canManageSalaryAcctRecordId.contains(f.getId())
).collect(Collectors.toList());
if (depAuthPage.size() > 0) {
needAuthPage.addAll(depAuthPage);
needAuthPage = needAuthPage.stream().distinct().collect(Collectors.toList());
}
salaryAcctRecordPOS = needAuthPage;
}
}
return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(),
salaryAcctRecordPOS, SalaryAcctRecordPO.class);
}

View File

@ -74,6 +74,8 @@ import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.util.StopWatch;
import weaver.general.BaseBean;
import weaver.hrm.User;
import weaver.hrm.company.DepartmentComInfo;
import weaver.wechat.util.Utils;
import java.math.BigDecimal;
import java.util.*;
@ -1385,6 +1387,26 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
List<TaxAgentAdminPO> adminTaxAgentList = getTaxAgentAdminService(user).listByEmployeeId(Long.valueOf(user.getUID()));
Optional<TaxAgentAdminPO> canOperate = adminTaxAgentList.stream().filter(po -> NumberUtils.compare(taxAgentId, po.getTaxAgentId()) == 0).findFirst();
if (!canOperate.isPresent()) {
// 艾志二开查询登录人拥有查看权限的部门
List<Long> depList = getSalaryEmployeeService(user).listDepIdByEmpId((long) user.getUID());
if (depList.size() > 0) {
List<String> depWithChildList = new ArrayList<>();
for (Long depId : depList) {
try {
String depStr = DepartmentComInfo.getAllChildDepartId(depId.toString(), depId.toString());
depWithChildList.addAll(Arrays.stream(depStr.split(",")).collect(Collectors.toList()));
} catch (Exception e) {
e.printStackTrace();
}
}
if (CollectionUtils.isNotEmpty(depWithChildList)) {
List<SalaryAcctEmployeePO> salaryAcctEmployeePOList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salaryAcctRecordId);
Optional<SalaryAcctEmployeePO> existOptional = salaryAcctEmployeePOList.stream().filter(acctEmp -> depWithChildList.contains(Utils.null2String(acctEmp.getDepartmentId()))).findFirst();
if (existOptional.isPresent()) {
return true;
}
}
}
return false;
}
return true;

View File

@ -2,6 +2,7 @@ package com.engine.salary.service.impl;
import cn.hutool.core.util.StrUtil;
import com.api.formmode.mybatis.util.SqlProxyHandle;
import com.cloudstore.eccom.pc.table.WeaTableColumn;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.biz.SalaryArchiveBiz;
@ -10,6 +11,7 @@ import com.engine.salary.biz.SalaryItemBiz;
import com.engine.salary.common.LocalDateRange;
import com.engine.salary.config.SalaryElogConfig;
import com.engine.salary.constant.SalaryDefaultTenantConstant;
import com.engine.salary.constant.SalaryItemConstant;
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.salaryarchive.config.ArchiveFieldConfig;
import com.engine.salary.entity.salaryarchive.dto.SalaryItemAdjustRecordListDTO;
@ -37,6 +39,7 @@ import com.engine.salary.util.db.IdGenerator;
import com.engine.salary.util.db.MapperProxyFactory;
import com.engine.salary.util.excel.ExcelUtil;
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 lombok.extern.slf4j.Slf4j;
@ -45,6 +48,7 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import weaver.hrm.User;
import weaver.wechat.util.Utils;
import java.text.SimpleDateFormat;
import java.util.*;
@ -652,6 +656,19 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi
return salaryArchiveItemMapper.salaryItemAdjustRecordList(queryParam, salaryItemIds);
}
@Override
public List<SalaryItemAdjustRecordListDTO> salaryItemAdjustRecordTime(SalaryItemAdjustRecordQueryParam queryParam, List<Long> salaryItemIds) {
List<SalaryItemAdjustRecordListDTO> salaryItemAdjustRecordListDTOS = salaryArchiveItemMapper.salaryItemAdjustRecordTime(queryParam, salaryItemIds);
if (CollectionUtils.isNotEmpty(queryParam.getEmployeeIds())) {
salaryItemAdjustRecordListDTOS = salaryItemAdjustRecordListDTOS.stream().filter(dto -> queryParam.getEmployeeIds().contains(dto.getEmployeeId())).collect(Collectors.toList());
}
if (CollectionUtils.isNotEmpty(queryParam.getPositionIds())) {
Set<Long> employeeIds = SalaryEntityUtil.properties(getSalaryEmployeeService(user).listByJobtitle(queryParam.getPositionIds()), DataCollectionEmployee::getEmployeeId);
salaryItemAdjustRecordListDTOS = salaryItemAdjustRecordListDTOS.stream().filter(dto -> employeeIds.contains(dto.getEmployeeId())).collect(Collectors.toList());
}
return salaryItemAdjustRecordListDTOS;
}
@Override
public XSSFWorkbook exportAdjustRecordList(SalaryItemAdjustRecordQueryParam queryParam) {
// 1.工作簿名称
@ -822,4 +839,170 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi
});
return resultList;
}
@Override
public Map<String, Object> azAdjustList(SalaryItemAdjustRecordQueryParam queryParam) {
Map<String, Object> resultMap = new HashMap<>();
// 获取所有可被引用的薪资项目
List<SalaryItemPO> salaryItemList = getSalaryArchiveItemService(user).getCanAdjustSalaryItems();
Set<Long> userTaxAgentIds = getTaxAgentService(user).listAllTaxAgents((long) user.getUID())
.stream().map(TaxAgentPO::getId).collect(Collectors.toSet());
salaryItemList = salaryItemList.stream()
.filter(po -> getSalaryItemService(user).filterInRange(userTaxAgentIds, po))
.collect(Collectors.toList());
List<Long> salaryItemIds = salaryItemList.stream().map(SalaryItemPO::getId).collect(Collectors.toList());
List<DataCollectionEmployee> employeeList = getSalaryEmployeeService(user).listAll(UseEmployeeTypeEnum.ALL);
Map<Long, String> employeeNameMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId, DataCollectionEmployee::getUsername);
Map<Long, String> taxAgentNameMap = SalaryEntityUtil.convert2Map(getTaxAgentService(user).listAll(), TaxAgentPO::getId, TaxAgentPO::getName);
long currentEmployeeId = user.getUID();
//是否开启分权
Boolean needAuth = getTaxAgentService(user).isNeedAuth(currentEmployeeId);
if (needAuth) {
Collection<TaxAgentPO> taxAgentPOS = getTaxAgentService(user).listAllTaxAgentsAsAdmin(currentEmployeeId);
List<Long> taxAgentIds = SalaryEntityUtil.properties(taxAgentPOS, TaxAgentPO::getId, Collectors.toList());
if (CollectionUtils.isEmpty(taxAgentIds)) {
return resultMap;
}
List<SalaryArchivePO> salaryArchives = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().taxAgentIds(taxAgentIds).build());
List<Long> salaryArchiveIds = SalaryEntityUtil.properties(salaryArchives, SalaryArchivePO::getId, Collectors.toList());
queryParam.setSalaryArchiveIds(salaryArchiveIds);
}
List<SalaryItemAdjustRecordListDTO> listResult = getSalaryArchiveItemService(user).salaryItemAdjustRecordTime(queryParam, salaryItemIds);
// 根据薪资档案id 生效日期分组
Map<String, List<SalaryItemAdjustRecordListDTO>> adjustResultMap = SalaryEntityUtil.group2Map(listResult, list -> list.getSalaryArchiveId() + "_" + SalaryDateUtil.getFormatDate(list.getEffectiveTime()));
// 根据生效日期人员id排序
LinkedHashMap<String, List<SalaryItemAdjustRecordListDTO>> sortedAdjustResultMap = adjustResultMap.entrySet().stream()
.sorted((entry1, entry2) -> {
String[] splitKey1 = entry1.getKey().split("_");
String effectiveDate1 = splitKey1.length > 1 ? splitKey1[1] : "";
String employeeId1 = Utils.null2String(CollectionUtils.isEmpty(entry1.getValue()) ? "" : entry1.getValue().get(0).getEmployeeId());
String[] splitKey2 = entry2.getKey().split("_");
String effectiveDate2 = splitKey2.length > 1 ? splitKey2[1] : "";
String employeeId2 = Utils.null2String(CollectionUtils.isEmpty(entry2.getValue()) ? "" :entry2.getValue().get(0).getEmployeeId());
if (effectiveDate1.equals(effectiveDate2)) {
Long empId1 = NumberUtils.isCreatable(employeeId1) ? Long.valueOf(employeeId1) : 0L;
Long empId2 = NumberUtils.isCreatable(employeeId2) ? Long.valueOf(employeeId2) : 0L;
return empId1.compareTo(empId2);
} else {
return effectiveDate2.compareTo(effectiveDate1);
}
}).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue,
LinkedHashMap::new));
List<String> allAdjustRecordKeyList = sortedAdjustResultMap.keySet().stream().collect(Collectors.toList());
// 分页
PageInfo<String> adjustRecordPageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), allAdjustRecordKeyList);
if (queryParam.isExport()) {
adjustRecordPageInfo.setList(allAdjustRecordKeyList);
}
List<String> adjustRecordKeyList = adjustRecordPageInfo.getList();
LinkedHashMap<String, List<Long>> archiveIdsGroupByEffectiveDate = new LinkedHashMap<>();
adjustRecordKeyList.stream().forEach( key -> {
String[] split = key.split("_");
Long salaryArchiveId = split.length > 0 && NumberUtils.isCreatable(split[0])? Long.valueOf(split[0]) : 0L;
String effectiveDate = split.length > 1 ? split[1] : "";
List<Long> archiveIdList = archiveIdsGroupByEffectiveDate.computeIfAbsent(effectiveDate, k -> new ArrayList<Long>());
archiveIdList.add(salaryArchiveId);
});
// 根据生效日期获取生效薪资数据
List<Map<String, Object>> dataList = new ArrayList<>();
for (Map.Entry<String, List<Long>> entry : archiveIdsGroupByEffectiveDate.entrySet()) {
String effectiveDateStr = entry.getKey();
Date effectiveDate = SalaryDateUtil.stringToDate(effectiveDateStr);
List<Long> salaryArchiveIds = entry.getValue();
List<SalaryArchiveItemPO> salaryArchiveItemList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(salaryArchiveIds) && CollectionUtils.isNotEmpty(salaryItemIds)) {
salaryArchiveItemList.addAll(getEffectiveItemListByDate(salaryArchiveIds, salaryItemIds, effectiveDate));
}
for (Long salaryArchiveId : salaryArchiveIds) {
List<SalaryItemAdjustRecordListDTO> salaryItemAdjustRecordListDTOS = adjustResultMap.get(salaryArchiveId + "_" + effectiveDateStr);
String userName = "";
String adjustReason = "";
String operator = "";
if (CollectionUtils.isNotEmpty(salaryItemAdjustRecordListDTOS)) {
SalaryItemAdjustRecordListDTO salaryItemAdjustRecordListDTO = salaryItemAdjustRecordListDTOS.get(0);
userName = employeeNameMap.getOrDefault(salaryItemAdjustRecordListDTO.getEmployeeId(), "");
adjustReason = salaryItemAdjustRecordListDTO.getAdjustReason();
operator = salaryItemAdjustRecordListDTO.getOperator();
}
SalaryArchivePO salaryArchivePO = getSalaryArchiveService(user).getById(salaryArchiveId);
HashMap<String, Object> dataMap = new HashMap<>();
dataMap.put("username", userName);
dataMap.put("adjustReason", SalaryArchiveItemAdjustReasonEnum.getDefaultLabelByValue(adjustReason));
dataMap.put("operator", operator);
dataMap.put("effectiveTime", effectiveDateStr);
dataMap.put("taxAgentName", taxAgentNameMap.getOrDefault(salaryArchivePO.getTaxAgentId(), ""));
List<SalaryArchiveItemPO> salaryArchiveItemValuelList = salaryArchiveItemList.stream().filter(i -> i.getSalaryArchiveId().equals(salaryArchiveId)).collect(Collectors.toList());
salaryArchiveItemValuelList.forEach(i -> {
dataMap.put(i.getSalaryItemId() + SalaryItemConstant.DYNAMIC_SUFFIX, i.getItemValue());
});
dataList.add(dataMap);
}
}
// 表头
List<WeaTableColumn> columns = new ArrayList<>();
columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(85429, "姓名"), "username"));
columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), "taxAgentName"));
columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "生效日期"), "effectiveTime"));
for (SalaryItemPO salaryItem : salaryItemList) {
columns.add(new WeaTableColumn("100px", salaryItem.getName(), salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX));
}
columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86184, "调整原因"), "adjustReason"));
columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "操作人"), "operator"));
PageInfo<Map<String, Object>> pageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize());
pageInfo.setTotal(adjustRecordPageInfo.getTotal());
pageInfo.setList(dataList);
resultMap.put("columns", columns);
resultMap.put("pageInfo", pageInfo);
return resultMap;
}
public List<SalaryArchiveItemPO> getEffectiveItemListByDate(Collection<Long> salaryArchivesIds, Collection<Long> salaryItemIds, Date effectiveTime) {
if (CollectionUtils.isEmpty(salaryItemIds) || effectiveTime == null) {
return Collections.EMPTY_LIST;
}
List<SalaryArchiveItemPO> salaryArchiveItems = salaryArchiveItemMapper.getCurrentEffectiveItemList(SalaryArchiveItemQueryParam.builder().salaryArchivesIds(salaryArchivesIds).salaryItemIds(salaryItemIds).effectiveTime(effectiveTime).build());
return salaryArchiveItems.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getSalaryArchiveId() + "-" + f.getSalaryItemId()))), ArrayList::new));
}
@Override
public XSSFWorkbook exportAzAdjustList(SalaryItemAdjustRecordQueryParam queryParam) {
queryParam.setExport(true);
Map<String, Object> map = azAdjustList(queryParam);
List<WeaTableColumn> columns = (List<WeaTableColumn>)map.get("columns");
PageInfo<Map<String, Object>> pageInfo = (PageInfo<Map<String, Object>>)map.get("pageInfo");
List<Map<String, Object>> list = pageInfo.getList();
//获取操作按钮资源
List<List<Object>> rowList = new ArrayList<>();
List<Object> columnRow = columns.stream().map(WeaTableColumn::getText).collect(Collectors.toList());
rowList.add(columnRow);
for (Map<String, Object> dataMap : list) {
List<Object> singleRow = new ArrayList<>();
for (WeaTableColumn column : columns) {
singleRow.add(Utils.null2String(dataMap.get(column.getColumn())));
}
rowList.add(singleRow);
}
//获取excel
return ExcelUtil.genWorkbookV2(rowList, "累计情况明细", false);
}
}

View File

@ -129,6 +129,19 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee
return result;
}
public List<DataCollectionEmployee> listByJobtitle(List<Long> jobtitleIds) {
List<DataCollectionEmployee> result = new ArrayList<>();
if (CollectionUtils.isEmpty(jobtitleIds)) {
return result;
}
List<List<Long>> partition = Lists.partition(jobtitleIds, 500);
partition.forEach(part -> {
result.addAll(getEmployMapper().listByJobtitle(part));
});
SalaryI18nUtil.i18nList(result);
return result;
}
@Override
public List<DataCollectionEmployee> listAllForReport() {
List<DataCollectionEmployee> result = employBiz.listAllForReport();
@ -633,6 +646,10 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee
return employBiz.listDepIdByEmpId(employeeId);
}
public List<Long> listDepIdByEmpIdAndOpe(Long employeeId, Integer operateId) {
return employBiz.listDepIdByEmpIdAndOpe(employeeId, operateId);
}
@Override
public List<Long> listEmpIdByDepId(List<Long> departmentIds) {
return employBiz.listEmpIdByDepId(departmentIds);

View File

@ -14,10 +14,6 @@ import java.awt.Color;
import java.math.BigDecimal;
import java.util.List;
import java.util.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@ -309,6 +305,96 @@ public class ExcelUtilPlus {
return workbook;
}
public static XSSFWorkbook genWorkbookV2ForAzSocial(List<List<Object>> rowList, String sheetName) {
XSSFWorkbook workbook = new XSSFWorkbook();
// 设置title样式
XSSFCellStyle titleCellStyle = workbook.createCellStyle();
XSSFFont titleFont = workbook.createFont();
titleFont.setBold(true);
titleFont.setFontName("仿宋");
titleFont.setFontHeightInPoints((short) 15);
titleCellStyle.setFont(titleFont);
titleCellStyle.setAlignment(HorizontalAlignment.CENTER);
titleCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//背景色
titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
titleCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
titleCellStyle.setBorderLeft(BorderStyle.THIN);
titleCellStyle.setBorderRight(BorderStyle.THIN);
titleCellStyle.setBorderTop(BorderStyle.THIN);
titleCellStyle.setBorderBottom(BorderStyle.THIN);
// 设置主体样式
XSSFCellStyle cellStyle = workbook.createCellStyle();
XSSFFont font = workbook.createFont();
font.setFontName("宋体");
font.setFontHeightInPoints((short) 10);// 设置字体大小
cellStyle.setFont(font);// 选择需要用到的字体格式
cellStyle.setWrapText(true);
cellStyle.setBorderLeft(BorderStyle.THIN);
cellStyle.setBorderRight(BorderStyle.THIN);
cellStyle.setBorderTop(BorderStyle.THIN);
cellStyle.setBorderBottom(BorderStyle.THIN);
XSSFSheet sheet = workbook.createSheet(sheetName);
//自适应宽度
sheet.autoSizeColumn(0, true);
//默认列宽
sheet.setDefaultColumnWidth(20);
//默认行高
sheet.setDefaultRowHeightInPoints(18);
//遍历设置列宽
List<Object> header = rowList.get(0);
for (int i = 0; i < header.size(); i++) {
sheet.setColumnWidth(i, Math.min(255, Math.max(12, header.get(i).toString().length() * 4)) * 256);
}
for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) {
List<Object> infoList = rowList.get(rowIndex);
XSSFRow row = sheet.createRow(rowIndex);
float height = 18;
float finalHeight = 18;
for (int cellIndex = 0; cellIndex < infoList.size(); cellIndex++) {
XSSFCell cell = row.createCell(cellIndex);
if (rowIndex == 0) {
cell.setCellStyle(titleCellStyle);
} else {
cell.setCellStyle(cellStyle);
}
Object o = infoList.get(cellIndex);
if (o instanceof String) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
} else if (o instanceof BigDecimal) {
cell.setCellType(CellType.NUMERIC);
cell.setCellValue(o == null ? 0 : ((BigDecimal) o).doubleValue());
} else if (o instanceof Boolean) {
cell.setCellType(CellType.BOOLEAN);
cell.setCellValue(String.valueOf(o));
} else if (o instanceof Date) {
cell.setCellType(CellType.STRING);
cell.setCellValue(SalaryDateUtil.getFormatLocalDate((Date) o));
} else {
cell.setCellType(CellType.STRING);
cell.setCellValue(o == null ? "" : o.toString());
}
//判断是否要调整高度
int width = sheet.getColumnWidth(cellIndex) / 256;
finalHeight = getFinalHeight(o, width, finalHeight, height);
}
row.setHeightInPoints(finalHeight);
if (rowIndex > 0 && rowIndex%2 == 0) {
sheet.addMergedRegion(new CellRangeAddress(rowIndex-1, rowIndex, 0, 0));
}
}
return workbook;
}
public static XSSFWorkbook genWorkbookV2(List<List<Object>> rowList, String sheetName, List<ExcelComment> comments) {
XSSFWorkbook workbook = new XSSFWorkbook();

View File

@ -101,6 +101,47 @@ public class SISchemeController {
}
/**
* 导出所有社保福利方案列表
*
* @param request
* @param response
* @return
*/
@POST
@Path("/exportAll")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response exportAll(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody InsuranceSchemeParam insuranceSchemeParam) {
try {
User user = HrmUserVarify.getUser(request, response);
XSSFWorkbook workbook = getSISchemeWrapper(user).exportAll(insuranceSchemeParam);
String fileName;
//表头
fileName = SalaryI18nUtil.getI18nLabel(0, "社保福利方案");
fileName = fileName + LocalDate.now();
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;
}
}
/**
* 新增
*

View File

@ -501,6 +501,45 @@ public class SalaryAcctController {
return new ResponseResult<SalaryAcctResultUpdateLockStatusParam, String>(user).run(getSalaryAcctEmployeeWrapper(user)::lockEmp, param);
}
// 艾志 提交
@POST
@Path("/acctresult/azSubmit")
@Produces(MediaType.APPLICATION_JSON)
public String azSubmit(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctEmpAzApprovalStatusParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalaryAcctEmpAzApprovalStatusParam, String>(user).run(getSalaryAcctEmployeeWrapper(user)::azSubmit, param);
}
// 艾志 退回
@POST
@Path("/acctresult/azReturn")
@Produces(MediaType.APPLICATION_JSON)
public String azReturn(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctEmpAzApprovalStatusParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalaryAcctEmpAzApprovalStatusParam, String>(user).run(getSalaryAcctEmployeeWrapper(user)::azReturn, param);
}
// 艾志 审核
@POST
@Path("/acctresult/azApprove")
@Produces(MediaType.APPLICATION_JSON)
public String azApprove(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctEmpAzApprovalStatusParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalaryAcctEmpAzApprovalStatusParam, String>(user).run(getSalaryAcctEmployeeWrapper(user)::azApprove, param);
}
// 艾志 弃审
@POST
@Path("/acctresult/azReApprove")
@Produces(MediaType.APPLICATION_JSON)
public String azReApprove(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctEmpAzApprovalStatusParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalaryAcctEmpAzApprovalStatusParam, String>(user).run(getSalaryAcctEmployeeWrapper(user)::azReApprove, param);
}
//批量更新
@POST
@Path("/acctresult/batchUpdate")

View File

@ -788,6 +788,45 @@ public class SalaryArchiveController {
return new ResponseResult<SalaryItemAdjustRecordQueryParam, PageInfo<SalaryItemAdjustRecordListDTO>>(user).run(getSalaryArchiveItemWrapper(user)::adjustRecordList, queryParam);
}
/**
* 艾志 调薪列表
*
* @return
*/
@POST
@Path("/azAdjustList")
@Produces(MediaType.APPLICATION_JSON)
public String azAdjustList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryItemAdjustRecordQueryParam queryParam) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalaryItemAdjustRecordQueryParam, Map<String, Object>>(user).run(getSalaryArchiveItemWrapper(user)::azAdjustList, queryParam);
}
/**
* 艾志 导出调薪列表
*
* @return
*/
@POST
@Path("/exportAzAdjustList")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response exportAzAdjustList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryItemAdjustRecordQueryParam queryParam) {;
User user = HrmUserVarify.getUser(request, response);
XSSFWorkbook workbook = getSalaryArchiveItemWrapper(user).exportAzAdjustList(queryParam);
String time = LocalDate.now().toString();
String 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();
}
/**
* 单个档案的薪资项目调整记录列表
*

View File

@ -7,6 +7,7 @@ import com.engine.salary.entity.sischeme.param.InsuranceSchemeParam;
import com.engine.salary.service.SISchemeService;
import com.engine.salary.service.impl.SISchemeServiceImpl;
import com.engine.salary.util.page.PageInfo;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import weaver.hrm.User;
/**
@ -25,4 +26,8 @@ public class SISchemeWrapper extends Service {
public PageInfo<InsuranceSchemeListDTO> listPage(InsuranceSchemeParam param) {
return getSISchemeService(user).list(param);
}
public XSSFWorkbook exportAll(InsuranceSchemeParam insuranceSchemeParam) {
return getSISchemeService(user).exportAll(insuranceSchemeParam);
}
}

View File

@ -206,4 +206,20 @@ public class SalaryAcctEmployeeWrapper extends Service {
public PageInfo<AbnormalEmployeeListDTO> listPage4NotDeclareByParam(AbnormalEmployeeListQueryParam param) {
return getSalaryAcctEmployeeService(user).listPage4NotDeclareByParam(param);
}
public void azSubmit(SalaryAcctEmpAzApprovalStatusParam param) {
getSalaryAcctEmployeeService(user).azSubmit(param);
}
public void azReturn(SalaryAcctEmpAzApprovalStatusParam param) {
getSalaryAcctEmployeeService(user).azReturn(param);
}
public void azApprove(SalaryAcctEmpAzApprovalStatusParam param) {
getSalaryAcctEmployeeService(user).azApprove(param);
}
public void azReApprove(SalaryAcctEmpAzApprovalStatusParam param) {
getSalaryAcctEmployeeService(user).azReApprove(param);
}
}

View File

@ -146,7 +146,9 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord
Set<Long> taxAgentIds = SalaryEntityUtil.properties(salarySobPOS, SalarySobPO::getTaxAgentId);
List<TaxAgentPO> taxAgentPOS = getTaxAgentService(user).listByIds(taxAgentIds);
// 转换成列表dto
List<SalaryAcctRecordListDTO> salaryAcctRecordListDTOS = SalaryAcctRecordBO.convert2ListDTO(list, salarySobPOS, employeeComInfos, salaryAcctEmployeeCountDTOS, salarySendCheckResult, taxAgentPOS, needApprovalSalarySobIds, approvalCanFile, approvalCanReCalc);
// 获取当前登录人员是否有操作权限
Collection<TaxAgentPO> canManageTaxAgents = getTaxAgentService(user).listAllTaxAgents(Long.valueOf(user.getUID()));
List<SalaryAcctRecordListDTO> salaryAcctRecordListDTOS = SalaryAcctRecordBO.convert2ListDTO(list, salarySobPOS, employeeComInfos, salaryAcctEmployeeCountDTOS, salarySendCheckResult, taxAgentPOS, needApprovalSalarySobIds, approvalCanFile, approvalCanReCalc, CollectionUtils.isNotEmpty(canManageTaxAgents));
dtoPage.setList(salaryAcctRecordListDTOS);
// 规则设置中是否开启审批功能默认关闭
if (CollectionUtils.isEmpty(needApprovalSalarySobIds)) {

View File

@ -12,6 +12,7 @@ import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultListColumnDTO;
import com.engine.salary.entity.salaryacct.dto.SalaryCalcTaxInfoDTO;
import com.engine.salary.entity.salaryacct.param.*;
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
import com.engine.salary.enums.salaryaccounting.LockStatusEnum;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.service.*;
import com.engine.salary.service.impl.*;
@ -19,6 +20,7 @@ import com.engine.salary.sys.service.SalarySysConfService;
import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl;
import com.engine.salary.util.SalaryI18nUtil;
import com.engine.salary.util.page.PageInfo;
import com.engine.salary.util.page.SalaryPageUtil;
import com.engine.salary.util.valid.ValidUtil;
import com.engine.salary.wrapper.proxy.SalaryAcctResultWrapperProxy;
import lombok.extern.slf4j.Slf4j;
@ -102,6 +104,12 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult
// 构建薪资核算结果列表的表头
List<WeaTableColumnGroup> columns = getSalaryAcctExcelService(user).listWeaTableColumn(salaryAcctRecordPO);
WeaTableColumnGroup tjColumn = new WeaTableColumnGroup(SalaryPageUtil.selfAdaption("提交状态", 65), "提交状态", "submittedStatus", LockStatusEnum.UNLOCK.getDefaultLabel());
tjColumn.setFixed("right");
columns.add(tjColumn);
WeaTableColumnGroup spColumn = new WeaTableColumnGroup(SalaryPageUtil.selfAdaption("审批状态", 65), "审批状态", "approvalStatus", LockStatusEnum.UNLOCK.getDefaultLabel());
spColumn.setFixed("right");
columns.add(spColumn);
Map<String, Object> datas = new HashMap<>();
datas.put("pageInfo", page);

View File

@ -2,8 +2,8 @@ package com.engine.salary.wrapper;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.config.SalaryElogConfig;
import com.engine.hrmelog.entity.dto.LoggerContext;
import com.engine.salary.config.SalaryElogConfig;
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveItemFormDTO;
import com.engine.salary.entity.salaryarchive.dto.SalaryItemAdjustRecordListDTO;
@ -499,4 +499,12 @@ public class SalaryArchiveItemWrapper extends Service implements SalaryArchiveIt
}
return null;
}
public Map<String, Object> azAdjustList(SalaryItemAdjustRecordQueryParam queryParam) {
return getSalaryArchiveItemService(user).azAdjustList(queryParam);
}
public XSSFWorkbook exportAzAdjustList(SalaryItemAdjustRecordQueryParam queryParam) {
return getSalaryArchiveItemService(user).exportAzAdjustList(queryParam);
}
}

View File

@ -119,6 +119,13 @@ public class TaxAgentWrapper extends Service {
Collection<TaxAgentPO> taxAgentPOS = getTaxAgentService(user).listAllTaxAgentsAsTaxDeclareAdmin(Long.valueOf(user.getUID()));
resultMap.put("isTaxDeclareAdmin", CollectionUtils.isNotEmpty(taxAgentPOS));
// 艾志 - 提交操作权限
List<Long> submitAuthList = getSalaryEmployeeService(user).listDepIdByEmpIdAndOpe(currentEmployeeId, 0);
resultMap.put("submitAuth", !CollectionUtils.isEmpty(submitAuthList));
// 艾志 - 确认操作权限
List<Long> confirmAuthList = getSalaryEmployeeService(user).listDepIdByEmpIdAndOpe(currentEmployeeId, 1);
resultMap.put("confirmAuth", !CollectionUtils.isEmpty(confirmAuthList));
return resultMap;
}