艾志二期薪酬二开
This commit is contained in:
parent
f57ca94900
commit
2c5e4a9d34
|
|
@ -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.
|
||||
|
|
@ -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
|
||||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -173,6 +173,12 @@ public class SalaryAcctEmployeePO {
|
|||
*/
|
||||
private Integer accountType;
|
||||
|
||||
// 艾志提交状态
|
||||
private String azSubmittedStatus;
|
||||
|
||||
// 艾志审批状态
|
||||
private String azApprovalStatus;
|
||||
|
||||
|
||||
|
||||
//--------条件----------
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 : "";
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -743,6 +743,7 @@
|
|||
ORDER BY t1.effective_time DESC,t1.id DESC
|
||||
</select>
|
||||
|
||||
|
||||
<sql id="salaryItemAdjustRecordColumn">
|
||||
t1.id,
|
||||
t1.employee_id,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -83,4 +83,6 @@ public interface SISchemeService {
|
|||
List<String> updateSchemeDetail(List<InsuranceSchemeDetailUpdateParam> schemeDetailList);
|
||||
|
||||
List<InsuranceSchemePO> listAll();
|
||||
|
||||
XSSFWorkbook exportAll(InsuranceSchemeParam insuranceSchemeParam);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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, "社保福利方案");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 新增
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
* 单个档案的薪资项目调整记录列表
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue