diff --git a/resource/sqlupgrade/DM/sql202501150103.sql b/resource/sqlupgrade/DM/sql202501150103.sql new file mode 100644 index 000000000..a51508d84 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202501150103.sql @@ -0,0 +1,72 @@ +CREATE TABLE hrsa_hrm_snapshot ( +ID NUMBER(38,0) primary key NOT NULL, +snapshot_time date, +employee_id NUMBER(38,0), +loginid varchar2(100), +LASTNAME varchar2(60), +SEX char(1), +BIRTHDAY char(10) , +NATIONALITY int , +MARITALSTATUS char(1) , +TELEPHONE varchar2(60), +MOBILE varchar2(60) , +MOBILECALL varchar2(60) , +EMAIL varchar2(60), +LOCATIONID int, +WORKROOM varchar2(60), +HOMEADDRESS varchar2(100), +RESOURCETYPE char(1) , +STARTDATE char(10) , +ENDDATE char(10), +JOBTITLE int , +JOBTITLENAME varchar2(200) , +JOBACTIVITYDESC varchar2(200), +JOBLEVEL int , +SECLEVEL int , +DEPARTMENTID int , +DEPARTMENTNAME varchar2(200) , +SUBCOMPANYID1 int , +SUBCOMPANYNAME varchar2(200) , +COSTCENTERID int , +MANAGERID int , +ASSISTANTID int, +BANKID1 int , +ACCOUNTID1 varchar2(100) , +LASTLOGINDATE char(10) , +CERTIFICATENUM varchar2(60) , +NATIVEPLACE varchar2(100) , +EDUCATIONLEVEL int , +BEMEMBERDATE char(10) , +BEPARTYDATE char(10) , +WORKCODE varchar2(60) , +REGRESIDENTPLACE varchar2(200) , +HEALTHINFO char(1) , +RESIDENTPLACE varchar2(200) , +POLICY varchar2(30) , +DEGREE varchar2(30) , +USEKIND int , +JOBCALL int , +jobcallname varchar2(200) , +ACCUMFUNDACCOUNT varchar2(30), +BIRTHPLACE varchar2(60) , +FOLK varchar2(30) , +RESIDENTPHONE varchar2(60) , +RESIDENTPOSTCODE varchar2(60) , +EXTPHONE varchar2(50) , +MANAGERSTR varchar2(500), +STATUS int , +FAX varchar2(60) , +ISLABOUUNION char(1), +TEMPRESIDENTNUMBER varchar2(60), +PROBATIONENDDATE char(10), +COUNTRYID int , +ACCOUNTTYPE int , +BELONGTO int , +ACCOUNTNAME varchar2(200) , +companystartdate varchar2(10), +workstartdate varchar2(10) , +companyworkyear number , +workyear number +); +/ + diff --git a/resource/sqlupgrade/DM/sql202502060103.sql b/resource/sqlupgrade/DM/sql202502060103.sql new file mode 100644 index 000000000..6ce16cbf8 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202502060103.sql @@ -0,0 +1,3 @@ +alter table hrsa_page_list_template add file_id int; +/ + diff --git a/resource/sqlupgrade/GS/sql202501150103.sql b/resource/sqlupgrade/GS/sql202501150103.sql new file mode 100644 index 000000000..a51508d84 --- /dev/null +++ b/resource/sqlupgrade/GS/sql202501150103.sql @@ -0,0 +1,72 @@ +CREATE TABLE hrsa_hrm_snapshot ( +ID NUMBER(38,0) primary key NOT NULL, +snapshot_time date, +employee_id NUMBER(38,0), +loginid varchar2(100), +LASTNAME varchar2(60), +SEX char(1), +BIRTHDAY char(10) , +NATIONALITY int , +MARITALSTATUS char(1) , +TELEPHONE varchar2(60), +MOBILE varchar2(60) , +MOBILECALL varchar2(60) , +EMAIL varchar2(60), +LOCATIONID int, +WORKROOM varchar2(60), +HOMEADDRESS varchar2(100), +RESOURCETYPE char(1) , +STARTDATE char(10) , +ENDDATE char(10), +JOBTITLE int , +JOBTITLENAME varchar2(200) , +JOBACTIVITYDESC varchar2(200), +JOBLEVEL int , +SECLEVEL int , +DEPARTMENTID int , +DEPARTMENTNAME varchar2(200) , +SUBCOMPANYID1 int , +SUBCOMPANYNAME varchar2(200) , +COSTCENTERID int , +MANAGERID int , +ASSISTANTID int, +BANKID1 int , +ACCOUNTID1 varchar2(100) , +LASTLOGINDATE char(10) , +CERTIFICATENUM varchar2(60) , +NATIVEPLACE varchar2(100) , +EDUCATIONLEVEL int , +BEMEMBERDATE char(10) , +BEPARTYDATE char(10) , +WORKCODE varchar2(60) , +REGRESIDENTPLACE varchar2(200) , +HEALTHINFO char(1) , +RESIDENTPLACE varchar2(200) , +POLICY varchar2(30) , +DEGREE varchar2(30) , +USEKIND int , +JOBCALL int , +jobcallname varchar2(200) , +ACCUMFUNDACCOUNT varchar2(30), +BIRTHPLACE varchar2(60) , +FOLK varchar2(30) , +RESIDENTPHONE varchar2(60) , +RESIDENTPOSTCODE varchar2(60) , +EXTPHONE varchar2(50) , +MANAGERSTR varchar2(500), +STATUS int , +FAX varchar2(60) , +ISLABOUUNION char(1), +TEMPRESIDENTNUMBER varchar2(60), +PROBATIONENDDATE char(10), +COUNTRYID int , +ACCOUNTTYPE int , +BELONGTO int , +ACCOUNTNAME varchar2(200) , +companystartdate varchar2(10), +workstartdate varchar2(10) , +companyworkyear number , +workyear number +); +/ + diff --git a/resource/sqlupgrade/GS/sql202502060103.sql b/resource/sqlupgrade/GS/sql202502060103.sql new file mode 100644 index 000000000..6ce16cbf8 --- /dev/null +++ b/resource/sqlupgrade/GS/sql202502060103.sql @@ -0,0 +1,3 @@ +alter table hrsa_page_list_template add file_id int; +/ + diff --git a/resource/sqlupgrade/JC/sql202501150103.sql b/resource/sqlupgrade/JC/sql202501150103.sql new file mode 100644 index 000000000..a51508d84 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202501150103.sql @@ -0,0 +1,72 @@ +CREATE TABLE hrsa_hrm_snapshot ( +ID NUMBER(38,0) primary key NOT NULL, +snapshot_time date, +employee_id NUMBER(38,0), +loginid varchar2(100), +LASTNAME varchar2(60), +SEX char(1), +BIRTHDAY char(10) , +NATIONALITY int , +MARITALSTATUS char(1) , +TELEPHONE varchar2(60), +MOBILE varchar2(60) , +MOBILECALL varchar2(60) , +EMAIL varchar2(60), +LOCATIONID int, +WORKROOM varchar2(60), +HOMEADDRESS varchar2(100), +RESOURCETYPE char(1) , +STARTDATE char(10) , +ENDDATE char(10), +JOBTITLE int , +JOBTITLENAME varchar2(200) , +JOBACTIVITYDESC varchar2(200), +JOBLEVEL int , +SECLEVEL int , +DEPARTMENTID int , +DEPARTMENTNAME varchar2(200) , +SUBCOMPANYID1 int , +SUBCOMPANYNAME varchar2(200) , +COSTCENTERID int , +MANAGERID int , +ASSISTANTID int, +BANKID1 int , +ACCOUNTID1 varchar2(100) , +LASTLOGINDATE char(10) , +CERTIFICATENUM varchar2(60) , +NATIVEPLACE varchar2(100) , +EDUCATIONLEVEL int , +BEMEMBERDATE char(10) , +BEPARTYDATE char(10) , +WORKCODE varchar2(60) , +REGRESIDENTPLACE varchar2(200) , +HEALTHINFO char(1) , +RESIDENTPLACE varchar2(200) , +POLICY varchar2(30) , +DEGREE varchar2(30) , +USEKIND int , +JOBCALL int , +jobcallname varchar2(200) , +ACCUMFUNDACCOUNT varchar2(30), +BIRTHPLACE varchar2(60) , +FOLK varchar2(30) , +RESIDENTPHONE varchar2(60) , +RESIDENTPOSTCODE varchar2(60) , +EXTPHONE varchar2(50) , +MANAGERSTR varchar2(500), +STATUS int , +FAX varchar2(60) , +ISLABOUUNION char(1), +TEMPRESIDENTNUMBER varchar2(60), +PROBATIONENDDATE char(10), +COUNTRYID int , +ACCOUNTTYPE int , +BELONGTO int , +ACCOUNTNAME varchar2(200) , +companystartdate varchar2(10), +workstartdate varchar2(10) , +companyworkyear number , +workyear number +); +/ + diff --git a/resource/sqlupgrade/JC/sql202502060103.sql b/resource/sqlupgrade/JC/sql202502060103.sql new file mode 100644 index 000000000..6ce16cbf8 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202502060103.sql @@ -0,0 +1,3 @@ +alter table hrsa_page_list_template add file_id int; +/ + diff --git a/resource/sqlupgrade/Mysql/sql202501150103.sql b/resource/sqlupgrade/Mysql/sql202501150103.sql new file mode 100644 index 000000000..2bff4f801 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202501150103.sql @@ -0,0 +1,71 @@ +CREATE TABLE hrsa_hrm_snapshot ( +ID bigint(0) NOT NULL, +snapshot_time datetime(0), +employee_id bigint(0), +loginid varchar(100), +LASTNAME varchar(60), +SEX char(1), +BIRTHDAY char(10) , +NATIONALITY int(0) , +MARITALSTATUS char(1) , +TELEPHONE varchar(60), +MOBILE varchar(60) , +MOBILECALL varchar(60) , +EMAIL varchar(60), +LOCATIONID int(0), +WORKROOM varchar(60), +HOMEADDRESS varchar(100), +RESOURCETYPE char(1) , +STARTDATE char(10) , +ENDDATE char(10), +JOBTITLE int(0) , +JOBTITLENAME varchar(200) , +JOBACTIVITYDESC varchar(200), +JOBLEVEL int(0) , +SECLEVEL int(0) , +DEPARTMENTID int(0) , +DEPARTMENTNAME varchar(200) , +SUBCOMPANYID1 int(0) , +SUBCOMPANYNAME varchar(200) , +COSTCENTERID int(0) , +MANAGERID int(0) , +ASSISTANTID int(0), +BANKID1 int(0) , +ACCOUNTID1 varchar(100) , +LASTLOGINDATE char(10) , +CERTIFICATENUM varchar(60) , +NATIVEPLACE varchar(100) , +EDUCATIONLEVEL int(0) , +BEMEMBERDATE char(10) , +BEPARTYDATE char(10) , +WORKCODE varchar(60) , +REGRESIDENTPLACE varchar(200) , +HEALTHINFO char(1) , +RESIDENTPLACE varchar(200) , +POLICY varchar(30) , +DEGREE varchar(30) , +USEKIND int(0) , +JOBCALL int(0) , +jobcallname varchar(200) , +ACCUMFUNDACCOUNT varchar(30), +BIRTHPLACE varchar(60) , +FOLK varchar(30) , +RESIDENTPHONE varchar(60) , +RESIDENTPOSTCODE varchar(60) , +EXTPHONE varchar(50) , +MANAGERSTR varchar(500), +STATUS int(0) , +FAX varchar(60) , +ISLABOUUNION char(1), +TEMPRESIDENTNUMBER varchar(60), +PROBATIONENDDATE char(10), +COUNTRYID int(0) , +ACCOUNTTYPE int(0) , +BELONGTO int(0) , +ACCOUNTNAME varchar(200) , +companystartdate varchar(10), +workstartdate varchar(10) , +companyworkyear decimal(10, 2) , +workyear decimal(10, 2) , +PRIMARY KEY (ID) USING BTREE +) ; \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202502060103.sql b/resource/sqlupgrade/Mysql/sql202502060103.sql new file mode 100644 index 000000000..0ed0d6acb --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202502060103.sql @@ -0,0 +1 @@ +ALTER TABLE hrsa_page_list_template ADD COLUMN file_id int(0); diff --git a/resource/sqlupgrade/Oracle/sql202501150103.sql b/resource/sqlupgrade/Oracle/sql202501150103.sql new file mode 100644 index 000000000..ee779a50f --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202501150103.sql @@ -0,0 +1,72 @@ +CREATE TABLE hrsa_hrm_snapshot ( +ID NUMBER(38,0) primary key NOT NULL, +snapshot_time date, +employee_id NUMBER(38,0), +loginid varchar2(100), +LASTNAME varchar2(60), +SEX char(1), +BIRTHDAY char(10) , +NATIONALITY int , +MARITALSTATUS char(1) , +TELEPHONE varchar2(60), +MOBILE varchar2(60) , +MOBILECALL varchar2(60) , +EMAIL varchar2(60), +LOCATIONID int, +WORKROOM varchar2(60), +HOMEADDRESS varchar2(100), +RESOURCETYPE char(1) , +STARTDATE char(10) , +ENDDATE char(10), +JOBTITLE int , +JOBTITLENAME varchar2(200) , +JOBACTIVITYDESC varchar2(200), +JOBLEVEL int , +SECLEVEL int , +DEPARTMENTID int , +DEPARTMENTNAME varchar2(200) , +SUBCOMPANYID1 int , +SUBCOMPANYNAME varchar2(200) , +COSTCENTERID int , +MANAGERID int , +ASSISTANTID int, +BANKID1 int , +ACCOUNTID1 varchar2(100) , +LASTLOGINDATE char(10) , +CERTIFICATENUM varchar2(60) , +NATIVEPLACE varchar2(100) , +EDUCATIONLEVEL int , +BEMEMBERDATE char(10) , +BEPARTYDATE char(10) , +WORKCODE varchar2(60) , +REGRESIDENTPLACE varchar2(200) , +HEALTHINFO char(1) , +RESIDENTPLACE varchar2(200) , +POLICY varchar2(30) , +DEGREE varchar2(30) , +USEKIND int , +JOBCALL int , +jobcallname varchar2(200) , +ACCUMFUNDACCOUNT varchar2(30), +BIRTHPLACE varchar2(60) , +FOLK varchar2(30) , +RESIDENTPHONE varchar2(60) , +RESIDENTPOSTCODE varchar2(60) , +EXTPHONE varchar2(50) , +MANAGERSTR varchar2(500), +STATUS int , +FAX varchar2(60) , +ISLABOUUNION char(1), +TEMPRESIDENTNUMBER varchar2(60), +PROBATIONENDDATE char(10), +COUNTRYID int , +ACCOUNTTYPE int , +BELONGTO int , +ACCOUNTNAME varchar2(200) , +companystartdate varchar2(10), +workstartdate varchar2(10) , +companyworkyear number , +workyear number +) + +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202502060103.sql b/resource/sqlupgrade/Oracle/sql202502060103.sql new file mode 100644 index 000000000..25da649a0 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202502060103.sql @@ -0,0 +1,2 @@ +alter table hrsa_page_list_template add file_id int +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202501150103.sql b/resource/sqlupgrade/PG/sql202501150103.sql new file mode 100644 index 000000000..d62aea72f --- /dev/null +++ b/resource/sqlupgrade/PG/sql202501150103.sql @@ -0,0 +1,71 @@ +CREATE TABLE hrsa_hrm_snapshot ( + ID bigint(0) NOT NULL, + snapshot_time timestamp, + employee_id bigint(0), + loginid varchar(100), + LASTNAME varchar(60), + SEX char(1), + BIRTHDAY char(10) , + NATIONALITY int(0) , + MARITALSTATUS char(1) , + TELEPHONE varchar(60), + MOBILE varchar(60) , + MOBILECALL varchar(60) , + EMAIL varchar(60), + LOCATIONID int(0), + WORKROOM varchar(60), + HOMEADDRESS varchar(100), + RESOURCETYPE char(1) , + STARTDATE char(10) , + ENDDATE char(10), + JOBTITLE int(0) , + JOBTITLENAME varchar(200) , + JOBACTIVITYDESC varchar(200), + JOBLEVEL int(0) , + SECLEVEL int(0) , + DEPARTMENTID int(0) , + DEPARTMENTNAME varchar(200) , + SUBCOMPANYID1 int(0) , + SUBCOMPANYNAME varchar(200) , + COSTCENTERID int(0) , + MANAGERID int(0) , + ASSISTANTID int(0), + BANKID1 int(0) , + ACCOUNTID1 varchar(100) , + LASTLOGINDATE char(10) , + CERTIFICATENUM varchar(60) , + NATIVEPLACE varchar(100) , + EDUCATIONLEVEL int(0) , + BEMEMBERDATE char(10) , + BEPARTYDATE char(10) , + WORKCODE varchar(60) , + REGRESIDENTPLACE varchar(200) , + HEALTHINFO char(1) , + RESIDENTPLACE varchar(200) , + POLICY varchar(30) , + DEGREE varchar(30) , + USEKIND int(0) , + JOBCALL int(0) , + jobcallname varchar(200) , + ACCUMFUNDACCOUNT varchar(30), + BIRTHPLACE varchar(60) , + FOLK varchar(30) , + RESIDENTPHONE varchar(60) , + RESIDENTPOSTCODE varchar(60) , + EXTPHONE varchar(50) , + MANAGERSTR varchar(500), + STATUS int(0) , + FAX varchar(60) , + ISLABOUUNION char(1), + TEMPRESIDENTNUMBER varchar(60), + PROBATIONENDDATE char(10), + COUNTRYID int(0) , + ACCOUNTTYPE int(0) , + BELONGTO int(0) , + ACCOUNTNAME varchar(200) , + companystartdate varchar(10), + workstartdate varchar(10) , + companyworkyear decimal(10, 2) , + workyear decimal(10, 2) , + PRIMARY KEY (ID) +) ; \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202502060103.sql b/resource/sqlupgrade/PG/sql202502060103.sql new file mode 100644 index 000000000..267d3416c --- /dev/null +++ b/resource/sqlupgrade/PG/sql202502060103.sql @@ -0,0 +1 @@ +alter table hrsa_page_list_template add file_id int; \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202501150103.sql b/resource/sqlupgrade/SQLServer/sql202501150103.sql new file mode 100644 index 000000000..e500a3b90 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202501150103.sql @@ -0,0 +1,72 @@ +CREATE TABLE hrsa_hrm_snapshot ( + ID bigint NOT NULL, + snapshot_time datetime, + employee_id bigint, + loginid varchar(100), + LASTNAME varchar(60), + SEX char(1), + BIRTHDAY char(10) , + NATIONALITY int , + MARITALSTATUS char(1) , + TELEPHONE varchar(60), + MOBILE varchar(60) , + MOBILECALL varchar(60) , + EMAIL varchar(60), + LOCATIONID int, + WORKROOM varchar(60), + HOMEADDRESS varchar(100), + RESOURCETYPE char(1) , + STARTDATE char(10) , + ENDDATE char(10), + JOBTITLE int , + JOBTITLENAME varchar(200) , + JOBACTIVITYDESC varchar(200), + JOBLEVEL int , + SECLEVEL int , + DEPARTMENTID int , + DEPARTMENTNAME varchar(200) , + SUBCOMPANYID1 int , + SUBCOMPANYNAME varchar(200) , + COSTCENTERID int , + MANAGERID int , + ASSISTANTID int, + BANKID1 int , + ACCOUNTID1 varchar(100) , + LASTLOGINDATE char(10) , + CERTIFICATENUM varchar(60) , + NATIVEPLACE varchar(100) , + EDUCATIONLEVEL int , + BEMEMBERDATE char(10) , + BEPARTYDATE char(10) , + WORKCODE varchar(60) , + REGRESIDENTPLACE varchar(200) , + HEALTHINFO char(1) , + RESIDENTPLACE varchar(200) , + POLICY varchar(30) , + DEGREE varchar(30) , + USEKIND int , + JOBCALL int , + jobcallname varchar(200) , + ACCUMFUNDACCOUNT varchar(30), + BIRTHPLACE varchar(60) , + FOLK varchar(30) , + RESIDENTPHONE varchar(60) , + RESIDENTPOSTCODE varchar(60) , + EXTPHONE varchar(50) , + MANAGERSTR varchar(500), + STATUS int , + FAX varchar(60) , + ISLABOUUNION char(1), + TEMPRESIDENTNUMBER varchar(60), + PROBATIONENDDATE char(10), + COUNTRYID int , + ACCOUNTTYPE int , + BELONGTO int , + ACCOUNTNAME varchar(200) , + companystartdate varchar(10), + workstartdate varchar(10) , + companyworkyear decimal(10, 2) , + workyear decimal(10, 2), + PRIMARY KEY (id) +) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202502060103.sql b/resource/sqlupgrade/SQLServer/sql202502060103.sql new file mode 100644 index 000000000..b6a038a58 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202502060103.sql @@ -0,0 +1,2 @@ +alter table hrsa_page_list_template add file_id int +go \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql202501150103.sql b/resource/sqlupgrade/ST/sql202501150103.sql new file mode 100644 index 000000000..a51508d84 --- /dev/null +++ b/resource/sqlupgrade/ST/sql202501150103.sql @@ -0,0 +1,72 @@ +CREATE TABLE hrsa_hrm_snapshot ( +ID NUMBER(38,0) primary key NOT NULL, +snapshot_time date, +employee_id NUMBER(38,0), +loginid varchar2(100), +LASTNAME varchar2(60), +SEX char(1), +BIRTHDAY char(10) , +NATIONALITY int , +MARITALSTATUS char(1) , +TELEPHONE varchar2(60), +MOBILE varchar2(60) , +MOBILECALL varchar2(60) , +EMAIL varchar2(60), +LOCATIONID int, +WORKROOM varchar2(60), +HOMEADDRESS varchar2(100), +RESOURCETYPE char(1) , +STARTDATE char(10) , +ENDDATE char(10), +JOBTITLE int , +JOBTITLENAME varchar2(200) , +JOBACTIVITYDESC varchar2(200), +JOBLEVEL int , +SECLEVEL int , +DEPARTMENTID int , +DEPARTMENTNAME varchar2(200) , +SUBCOMPANYID1 int , +SUBCOMPANYNAME varchar2(200) , +COSTCENTERID int , +MANAGERID int , +ASSISTANTID int, +BANKID1 int , +ACCOUNTID1 varchar2(100) , +LASTLOGINDATE char(10) , +CERTIFICATENUM varchar2(60) , +NATIVEPLACE varchar2(100) , +EDUCATIONLEVEL int , +BEMEMBERDATE char(10) , +BEPARTYDATE char(10) , +WORKCODE varchar2(60) , +REGRESIDENTPLACE varchar2(200) , +HEALTHINFO char(1) , +RESIDENTPLACE varchar2(200) , +POLICY varchar2(30) , +DEGREE varchar2(30) , +USEKIND int , +JOBCALL int , +jobcallname varchar2(200) , +ACCUMFUNDACCOUNT varchar2(30), +BIRTHPLACE varchar2(60) , +FOLK varchar2(30) , +RESIDENTPHONE varchar2(60) , +RESIDENTPOSTCODE varchar2(60) , +EXTPHONE varchar2(50) , +MANAGERSTR varchar2(500), +STATUS int , +FAX varchar2(60) , +ISLABOUUNION char(1), +TEMPRESIDENTNUMBER varchar2(60), +PROBATIONENDDATE char(10), +COUNTRYID int , +ACCOUNTTYPE int , +BELONGTO int , +ACCOUNTNAME varchar2(200) , +companystartdate varchar2(10), +workstartdate varchar2(10) , +companyworkyear number , +workyear number +); +/ + diff --git a/resource/sqlupgrade/ST/sql202502060103.sql b/resource/sqlupgrade/ST/sql202502060103.sql new file mode 100644 index 000000000..6ce16cbf8 --- /dev/null +++ b/resource/sqlupgrade/ST/sql202502060103.sql @@ -0,0 +1,3 @@ +alter table hrsa_page_list_template add file_id int; +/ + diff --git a/src/com/engine/salary/entity/datacollection/bo/DataCollectionBO.java b/src/com/engine/salary/entity/datacollection/bo/DataCollectionBO.java index b2908091e..107780888 100644 --- a/src/com/engine/salary/entity/datacollection/bo/DataCollectionBO.java +++ b/src/com/engine/salary/entity/datacollection/bo/DataCollectionBO.java @@ -385,7 +385,7 @@ public class DataCollectionBO { .outerRequestId(requestPO.getOuterRequestId()) .taxYearMonth(requestPO.getTaxYearMonth()) .taxAgentId(requestPO.getTaxAgentId()) - .employeeId(employeeId) + .employeeId(employeeId == null ? 0L : employeeId) .createTime(now) .updateTime(now) .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) diff --git a/src/com/engine/salary/entity/setting/dto/PageListTemplateDTO.java b/src/com/engine/salary/entity/setting/dto/PageListTemplateDTO.java index 24570f54a..de493e128 100644 --- a/src/com/engine/salary/entity/setting/dto/PageListTemplateDTO.java +++ b/src/com/engine/salary/entity/setting/dto/PageListTemplateDTO.java @@ -59,6 +59,11 @@ public class PageListTemplateDTO { @TableTitle(title = "范围",dataIndex = "limits",key = "limits") private String limits; + @TableTitle(title = "导出模板",dataIndex = "fileName",key = "fileName") + private String fileName; + private Integer fileId; + + /** * 限制 */ diff --git a/src/com/engine/salary/entity/setting/param/DownloadTemplateParam.java b/src/com/engine/salary/entity/setting/param/DownloadTemplateParam.java new file mode 100644 index 000000000..ee882d721 --- /dev/null +++ b/src/com/engine/salary/entity/setting/param/DownloadTemplateParam.java @@ -0,0 +1,24 @@ +package com.engine.salary.entity.setting.param; + +import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DownloadTemplateParam { + + @DataCheck(require = true,message = "请选择表头") + private List heads; + + @DataCheck(require = true,message = "请选择设置") + private List setting; + +} \ No newline at end of file diff --git a/src/com/engine/salary/entity/setting/param/PageListTemplateSaveParam.java b/src/com/engine/salary/entity/setting/param/PageListTemplateSaveParam.java index 1ef45247a..cde28fdf9 100644 --- a/src/com/engine/salary/entity/setting/param/PageListTemplateSaveParam.java +++ b/src/com/engine/salary/entity/setting/param/PageListTemplateSaveParam.java @@ -40,4 +40,9 @@ public class PageListTemplateSaveParam { */ @DataCheck(require = true,message = "请选择设置") private List setting; + + /** + * 导出模板id + */ + private Integer fileId; } \ No newline at end of file diff --git a/src/com/engine/salary/entity/setting/po/PageListTemplatePO.java b/src/com/engine/salary/entity/setting/po/PageListTemplatePO.java index 1b2f727b4..adebbf0e2 100644 --- a/src/com/engine/salary/entity/setting/po/PageListTemplatePO.java +++ b/src/com/engine/salary/entity/setting/po/PageListTemplatePO.java @@ -12,7 +12,7 @@ import java.util.Date; import java.util.List; /** - * 薪资帐套表 + * 页面模板表 */ @Data @Builder @@ -64,6 +64,12 @@ public class PageListTemplatePO { @ElogTransform(name = "限制") private List limitIds; + /** + * excel模板文件id + */ + @ElogTransform(name = "模板文件id") + private Integer fileId; + /** * 租户ID */ diff --git a/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationSaveParam.java b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationSaveParam.java index 0a5003f69..0c9439b27 100644 --- a/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationSaveParam.java +++ b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationSaveParam.java @@ -2,6 +2,7 @@ package com.engine.salary.entity.taxdeclaration.param; import com.engine.salary.enums.taxdeclaration.TaxAgentRangeEnum; import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -9,6 +10,8 @@ import lombok.NoArgsConstructor; import java.util.Date; import java.util.List; +import java.time.YearMonth; +import java.util.Date; /** * 生成个税申报表参数 @@ -54,4 +57,12 @@ public class TaxDeclarationSaveParam { * 备注 */ private String description; + + private String salaryMonthStr; + + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date taxCycle; + + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date salaryDate; } diff --git a/src/com/engine/salary/maintainer/datacollection/AddUpSituationManager.java b/src/com/engine/salary/maintainer/datacollection/AddUpSituationManager.java index da05677cb..f0dc04731 100644 --- a/src/com/engine/salary/maintainer/datacollection/AddUpSituationManager.java +++ b/src/com/engine/salary/maintainer/datacollection/AddUpSituationManager.java @@ -49,7 +49,7 @@ public class AddUpSituationManager extends Service { int delete = getTaxDeclarationMapper().deleteByIdZj(po.getId()); // 调用生成申报单接口 try { - getTaxDeclarationService().save(TaxDeclarationSaveParam.builder().salaryMonth(po.getSalaryMonth()).taxAgentId(po.getTaxAgentId()).build()); + getTaxDeclarationService().save(TaxDeclarationSaveParam.builder().salaryMonth(po.getSalaryMonth()).salaryDate(po.getSalaryMonth()).taxCycle(po.getTaxCycle()).taxAgentId(po.getTaxAgentId()).build()); } catch (Exception e) { bb.writeLog("错误:" + e); result = false; diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml index 38438a3eb..45d6ba85f 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml @@ -126,7 +126,7 @@ LEFT JOIN hrmdepartment d ON d.id = e.departmentid LEFT JOIN hrmsubcompany c ON c.id = e.subcompanyid1 WHERE t.delete_type = 0 - and t.employee_type is null + and (t.employee_type is null or t.employee_type = 0) and e.status not in (7) @@ -230,7 +230,7 @@ LEFT JOIN hrmdepartment d ON d.id = e.departmentid LEFT JOIN hrmsubcompany c ON c.id = e.subcompanyid1 WHERE t.delete_type = 0 - and t.employee_type is null + and (t.employee_type is null or t.employee_type = 0) and e.status not in (7) @@ -331,7 +331,7 @@ LEFT JOIN hrmdepartment d ON d.id = e.departmentid LEFT JOIN hrmsubcompany c ON c.id = e.subcompanyid1 WHERE t.delete_type = 0 - and t.employee_type is null + and (t.employee_type is null or t.employee_type = 0) and e.status not in (7) diff --git a/src/com/engine/salary/mapper/setting/PageListTemplateMapper.xml b/src/com/engine/salary/mapper/setting/PageListTemplateMapper.xml index 02d015d13..e24131e5f 100644 --- a/src/com/engine/salary/mapper/setting/PageListTemplateMapper.xml +++ b/src/com/engine/salary/mapper/setting/PageListTemplateMapper.xml @@ -9,11 +9,12 @@ - + + @@ -32,6 +33,7 @@ , t.system_type , t.tenant_key , t.update_time + , t.file_id @@ -75,13 +77,16 @@ AND page = #{page} + + AND file_id = #{fileId} + AND setting = #{setting} AND shared_type = #{sharedType} - + AND system_type = #{systemType} @@ -141,6 +146,9 @@ update_time, + + file_id, + @@ -179,6 +187,9 @@ #{updateTime}, + + #{fileId}, + @@ -197,6 +208,7 @@ system_type=#{systemType}, tenant_key=#{tenantKey}, update_time=#{updateTime}, + file_id=#{fileId}, WHERE id = #{id} AND delete_type = 0 @@ -239,6 +251,7 @@ update_time=#{updateTime}, + file_id=#{fileId}, WHERE id = #{id} AND delete_type = 0 diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java index 5e2421a08..0b1922313 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java @@ -10,6 +10,8 @@ import com.engine.salary.component.WeaTableColumnGroup; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.entity.setting.param.PageListTemplateQueryParam; +import com.engine.salary.entity.setting.po.PageListTemplatePO; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.report.common.constant.SalaryConstant; import com.engine.salary.report.entity.bo.SalaryStatisticsReportBO; @@ -29,6 +31,7 @@ import com.engine.salary.sys.service.SalarySysConfService; import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.excel.ExcelFillUtils; import com.engine.salary.util.excel.ExcelUtilPlus; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; @@ -38,9 +41,11 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import weaver.file.ImageFileManager; import weaver.general.Util; import weaver.hrm.User; +import java.io.InputStream; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -183,10 +188,12 @@ public class SalaryStatisticsEmployeeWrapper extends Service { pageInfo.setTotal(salaryAcctEmployeePageInfo.getTotal()); List weaTableColumns = getSettingService(user).getPageListColumns(SALARY_DETAILS_REPORT.getValue()); - + List pageListTemplates = getSettingService(user).getPageListTemplates(PageListTemplateQueryParam.builder().page(SALARY_DETAILS_REPORT.getValue()).build()); + Integer fileId = pageListTemplates.stream().filter(PageListTemplatePO::getChecked).findFirst().map(PageListTemplatePO::getFileId).orElse(null); // 结果 resultMap.put("columns", weaTableColumns); resultMap.put("pageInfo", pageInfo); + resultMap.put("fileId", fileId); if (queryParam.isExport()) { Map countResultMap = Maps.newHashMap(); List salaryItems = salaryStatisticsEmployeeDetailResult.getSalaryItemList(); @@ -270,8 +277,17 @@ public class SalaryStatisticsEmployeeWrapper extends Service { Map resultMap = salaryList(queryParam); List columns = (List) resultMap.get("columns"); List> resultList = ((PageInfo>) resultMap.get("pageInfo")).getList(); - Map countResult = (Map) resultMap.get("countResult"); + //根据上传的模板导出 + Object fileId = resultMap.get("fileId"); + if (fileId != null) { + InputStream inputStream = ImageFileManager.getInputStreamById((Integer) fileId); + XSSFWorkbook workbook = ExcelFillUtils.fillOneSheet(inputStream, 0, resultList); + return workbook; + } + + //根据显示列表导出 + Map countResult = (Map) resultMap.get("countResult"); Map columnMap = SalaryEntityUtil.convert2Map(columns, WeaTableColumn::getColumn); // 获取薪资项目保留小数位数 List salaryItemPOList = getSalaryItemService(user).listAll(); diff --git a/src/com/engine/salary/service/AddUpDeductionService.java b/src/com/engine/salary/service/AddUpDeductionService.java index 0bf72af18..b41c5700c 100644 --- a/src/com/engine/salary/service/AddUpDeductionService.java +++ b/src/com/engine/salary/service/AddUpDeductionService.java @@ -100,14 +100,6 @@ public interface AddUpDeductionService { */ List getAddUpDeductionList(YearMonth declareMonth, List employeeIds, Long taxAgentId); - /** - * 根据年月获取已核算数据 - * - * @param yearMonth - * @return - */ - List getAccountedEmployeeData(String yearMonth); - List getAccountedEmployeeDataByTaxYearMonth(String yearMonth); /** diff --git a/src/com/engine/salary/service/SalaryEmployeeService.java b/src/com/engine/salary/service/SalaryEmployeeService.java index fa5f766e7..6287d79c5 100644 --- a/src/com/engine/salary/service/SalaryEmployeeService.java +++ b/src/com/engine/salary/service/SalaryEmployeeService.java @@ -43,9 +43,10 @@ public interface SalaryEmployeeService { * 根据薪资账套id查询人员 * * @param salarySobId 薪资账套id + * @param hasExtEmp 是否含非系统人员 * @return */ - List listBySalarySobId(Long salarySobId); + List listBySalarySobId(Long salarySobId, boolean hasExtEmp); /** * 获取人员信息 diff --git a/src/com/engine/salary/service/SettingService.java b/src/com/engine/salary/service/SettingService.java index a859a3393..314a9cf43 100644 --- a/src/com/engine/salary/service/SettingService.java +++ b/src/com/engine/salary/service/SettingService.java @@ -6,6 +6,7 @@ import com.engine.salary.entity.setting.dto.PageListTemplateDetailDTO; import com.engine.salary.entity.setting.param.*; import com.engine.salary.entity.setting.po.PageListTemplatePO; import com.engine.salary.util.page.PageInfo; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.util.List; @@ -45,6 +46,13 @@ public interface SettingService { */ PageListTemplatePO savePageListTemplate(PageListTemplateSaveParam param); + /** + * 下载导出模板文件 + * @param param + * @return + */ + XSSFWorkbook downloadPageExportTemplateFile(DownloadTemplateParam param); + /** * 更换模板 * @param param diff --git a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java index 1f8efff29..ca998e4b7 100644 --- a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java @@ -13,7 +13,6 @@ import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.biz.AddUpDeductionBiz; -import com.engine.salary.common.LocalDateRange; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SzyhApiConstant; import com.engine.salary.encrypt.EncryptUtil; @@ -35,6 +34,7 @@ import com.engine.salary.entity.extemp.po.ExtEmpPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; +import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.taxagent.bo.TaxAgentBO; import com.engine.salary.entity.taxagent.dto.TaxAgentEmployeeDTO; import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeEmployeeDTO; @@ -50,6 +50,7 @@ import com.engine.salary.enums.datacollection.EnumAddUpDeductionRequestStatus; import com.engine.salary.enums.datacollection.UseEmployeeTypeEnum; import com.engine.salary.enums.employeedeclare.DeclareStatusEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; +import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveStatusEnum; import com.engine.salary.enums.sicategory.DeleteTypeEnum; import com.engine.salary.enums.taxagent.TaxAgentTaxReturnStatusEnum; @@ -177,6 +178,10 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction return ServiceUtil.getService(ExtEmpServiceImpl.class, user); } + private SalarySobService getSalarySobService(User user) { + return ServiceUtil.getService(SalarySobServiceImpl.class, user); + } + @Override public Map getSearchCondition(Map params) { Map apidatas = new HashMap(); @@ -249,7 +254,7 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction List employees = getSalaryEmployeeService(user).listEmployee(); // 已经核算过的不可操作 // 获取已经核算的数据 - List salaryAcctEmployees = getAccountedEmployeeData(declareMonthStr); + List salaryAcctEmployees = getAccountedEmployeeDataByTaxYearMonth(declareMonthStr); // 查询已有数据 Date declareMonth = SalaryDateUtil.localDateToDate(LocalDate.parse(declareMonthStr + "-01", SalaryDateUtil.DATE_FORMATTER)); List list = getAddUpDeductionMapper().listSome(AddUpDeduction.builder().declareMonth(declareMonth).build()); @@ -520,7 +525,7 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction // 已经核算过的不可操作 // 获取已经核算的数据 - List salaryAcctEmployees = getAccountedEmployeeData(declareMonthStr); + List salaryAcctEmployees = getAccountedEmployeeDataByTaxYearMonth(declareMonthStr); // 判断是否有核算过 if (CollectionUtils.isNotEmpty(salaryAcctEmployees)) { Optional optionalAcctEmp = salaryAcctEmployees.stream().filter(f -> f.getEmployeeId().equals(addUpDeduction.getEmployeeId()) && f.getTaxAgentId().equals(addUpDeduction.getTaxAgentId())).findFirst(); @@ -568,7 +573,7 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction List employees = getSalaryEmployeeService(user).listEmployee(); // 已经核算过的不可操作 // 获取已经核算的数据 - List salaryAcctEmployees = getAccountedEmployeeData(declareMonthStr); + List salaryAcctEmployees = getAccountedEmployeeDataByTaxYearMonth(declareMonthStr); // 查询已有数据 Date declareMonth = SalaryDateUtil.localDateToDate(LocalDate.parse(declareMonthStr + "-01", SalaryDateUtil.DATE_FORMATTER)); List list = getAddUpDeductionMapper().listSome(AddUpDeduction.builder().declareMonth(declareMonth).build()); @@ -834,8 +839,7 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction List updateList = new ArrayList<>(); List insertList = new ArrayList<>(); List errorMessages = new ArrayList<>(); - List accountedEmployeeData = - getAccountedEmployeeData(DateUtil.format(yearMonth, "yyyy-MM")); + List accountedEmployeeData = getAccountedEmployeeDataByTaxYearMonth(DateUtil.format(yearMonth, "yyyy-MM")); for (TaxAgentPO taxAgent : taxAgents) { List employeePOs = getSpecialAddDeductionService(user) .getSpecialAddDeductionPOByEmployee(null, taxAgent.getId()); @@ -1154,12 +1158,12 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction cellList.add(Util.null2String(dto.getDepartmentName())); cellList.add(Util.null2String(dto.getJobNum())); cellList.add(NumberUtil.isNumber(dto.getAddUpChildEducation()) ? new BigDecimal(dto.getAddUpChildEducation()) : Util.null2String(dto.getAddUpChildEducation())); - cellList.add(NumberUtil.isNumber(dto.getAddUpContinuingEducation()) ? new BigDecimal(dto.getAddUpContinuingEducation()) :Util.null2String(dto.getAddUpContinuingEducation())); - cellList.add(NumberUtil.isNumber(dto.getAddUpHousingLoanInterest()) ? new BigDecimal(dto.getAddUpHousingLoanInterest()) :Util.null2String(dto.getAddUpHousingLoanInterest())); - cellList.add(NumberUtil.isNumber(dto.getAddUpHousingRent()) ? new BigDecimal(dto.getAddUpHousingRent()) :Util.null2String(dto.getAddUpHousingRent())); - cellList.add(NumberUtil.isNumber(dto.getAddUpSupportElderly()) ? new BigDecimal(dto.getAddUpSupportElderly()) :Util.null2String(dto.getAddUpSupportElderly())); - cellList.add(NumberUtil.isNumber(dto.getAddUpIllnessMedical()) ? new BigDecimal(dto.getAddUpIllnessMedical()) :Util.null2String(dto.getAddUpIllnessMedical())); - cellList.add(NumberUtil.isNumber(dto.getAddUpInfantCare()) ? new BigDecimal(dto.getAddUpInfantCare()) :Util.null2String(dto.getAddUpInfantCare())); + cellList.add(NumberUtil.isNumber(dto.getAddUpContinuingEducation()) ? new BigDecimal(dto.getAddUpContinuingEducation()) : Util.null2String(dto.getAddUpContinuingEducation())); + cellList.add(NumberUtil.isNumber(dto.getAddUpHousingLoanInterest()) ? new BigDecimal(dto.getAddUpHousingLoanInterest()) : Util.null2String(dto.getAddUpHousingLoanInterest())); + cellList.add(NumberUtil.isNumber(dto.getAddUpHousingRent()) ? new BigDecimal(dto.getAddUpHousingRent()) : Util.null2String(dto.getAddUpHousingRent())); + cellList.add(NumberUtil.isNumber(dto.getAddUpSupportElderly()) ? new BigDecimal(dto.getAddUpSupportElderly()) : Util.null2String(dto.getAddUpSupportElderly())); + cellList.add(NumberUtil.isNumber(dto.getAddUpIllnessMedical()) ? new BigDecimal(dto.getAddUpIllnessMedical()) : Util.null2String(dto.getAddUpIllnessMedical())); + cellList.add(NumberUtil.isNumber(dto.getAddUpInfantCare()) ? new BigDecimal(dto.getAddUpInfantCare()) : Util.null2String(dto.getAddUpInfantCare())); return cellList; }).collect(Collectors.toList())) @@ -1304,12 +1308,12 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction cellList.add(Util.null2String(dto.getIdNo())); cellList.add(Util.null2String(dto.getHiredate())); cellList.add(NumberUtil.isNumber(dto.getAddUpChildEducation()) ? new BigDecimal(dto.getAddUpChildEducation()) : Util.null2String(dto.getAddUpChildEducation())); - cellList.add(NumberUtil.isNumber(dto.getAddUpContinuingEducation()) ? new BigDecimal(dto.getAddUpContinuingEducation()) :Util.null2String(dto.getAddUpContinuingEducation())); - cellList.add(NumberUtil.isNumber(dto.getAddUpHousingLoanInterest()) ? new BigDecimal(dto.getAddUpHousingLoanInterest()) :Util.null2String(dto.getAddUpHousingLoanInterest())); - cellList.add(NumberUtil.isNumber(dto.getAddUpHousingRent()) ? new BigDecimal(dto.getAddUpHousingRent()) :Util.null2String(dto.getAddUpHousingRent())); - cellList.add(NumberUtil.isNumber(dto.getAddUpSupportElderly()) ? new BigDecimal(dto.getAddUpSupportElderly()) :Util.null2String(dto.getAddUpSupportElderly())); - cellList.add(NumberUtil.isNumber(dto.getAddUpIllnessMedical()) ? new BigDecimal(dto.getAddUpIllnessMedical()) :Util.null2String(dto.getAddUpIllnessMedical())); - cellList.add(NumberUtil.isNumber(dto.getAddUpInfantCare()) ? new BigDecimal(dto.getAddUpInfantCare()) :Util.null2String(dto.getAddUpInfantCare())); + cellList.add(NumberUtil.isNumber(dto.getAddUpContinuingEducation()) ? new BigDecimal(dto.getAddUpContinuingEducation()) : Util.null2String(dto.getAddUpContinuingEducation())); + cellList.add(NumberUtil.isNumber(dto.getAddUpHousingLoanInterest()) ? new BigDecimal(dto.getAddUpHousingLoanInterest()) : Util.null2String(dto.getAddUpHousingLoanInterest())); + cellList.add(NumberUtil.isNumber(dto.getAddUpHousingRent()) ? new BigDecimal(dto.getAddUpHousingRent()) : Util.null2String(dto.getAddUpHousingRent())); + cellList.add(NumberUtil.isNumber(dto.getAddUpSupportElderly()) ? new BigDecimal(dto.getAddUpSupportElderly()) : Util.null2String(dto.getAddUpSupportElderly())); + cellList.add(NumberUtil.isNumber(dto.getAddUpIllnessMedical()) ? new BigDecimal(dto.getAddUpIllnessMedical()) : Util.null2String(dto.getAddUpIllnessMedical())); + cellList.add(NumberUtil.isNumber(dto.getAddUpInfantCare()) ? new BigDecimal(dto.getAddUpInfantCare()) : Util.null2String(dto.getAddUpInfantCare())); return cellList; }).collect(Collectors.toList())) .orElse(Collections.emptyList()); @@ -1317,45 +1321,24 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction } - /** - * 根据年月获取已核算数据 - * - * @param yearMonth - * @return - */ - @Override - public List getAccountedEmployeeData(String yearMonth) { - List list = Lists.newArrayList(); - LocalDate salaryMonthDate = LocalDate.parse(yearMonth + "-01", SalaryDateUtil.DATE_FORMATTER); - List salaryAcctRecords = getSalaryAcctRecordService(user).listBySalaryMonth(LocalDateRange.builder().fromDate(SalaryDateUtil.localDateToDate(salaryMonthDate)).endDate(SalaryDateUtil.localDateToDate(salaryMonthDate)).build()); - salaryAcctRecords.forEach(e -> { - boolean isAccounted = e.getStatus() > SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue(); - if (isAccounted) { -// list.addAll(getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecords.get(0).getId()))); - list.addAll(getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(Collections.singleton(e.getId()))); - } - }); - - return list; - } - @Override public List getAccountedEmployeeDataByTaxYearMonth(String yearMonth) { List list = Lists.newArrayList(); YearMonth month = YearMonth.parse(yearMonth); - LocalDate salaryMonthDate = month.atDay(1); - LocalDate salaryMonthEndDate = month.atEndOfMonth(); - List salaryAcctRecords = getSalaryAcctRecordService(user).listByTaxCycle( - LocalDateRange.builder().fromDate(SalaryDateUtil.localDateToDate(salaryMonthDate)) - .endDate(SalaryDateUtil.localDateToDate(salaryMonthEndDate)).build(), - null); - salaryAcctRecords.forEach(e -> { - boolean isAccounted = e.getStatus() > SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue(); - if (isAccounted) { -// list.addAll(getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecords.get(0).getId()))); - list.addAll(getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(Collections.singleton(e.getId()))); - } - }); + Date taxCycle = SalaryDateUtil.localDateToDate(month.atDay(1)); + + List salaryAcctRecords = getSalaryAcctRecordService(user).listSome(SalaryAcctRecordPO.builder().taxCycle(taxCycle).build()); + List salarySobPOS = getSalarySobService(user).listAll(); + List sobIds = salarySobPOS.stream() + .filter(e -> IncomeCategoryEnum.WAGES_AND_SALARIES.getValue().equals(e.getIncomeCategory())) + .map(SalarySobPO::getId) + .collect(Collectors.toList()); + salaryAcctRecords.stream() + .filter(e -> !SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue().equals(e.getStatus())) + .filter(e -> sobIds.contains(e.getSalarySobId())) + .forEach(e -> { + list.addAll(getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(Collections.singleton(e.getId()))); + }); return list; } diff --git a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java index 2bce4fca5..1c78237a2 100644 --- a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java @@ -1040,7 +1040,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation List employees = getSalaryEmployeeService(user).listEmployee(); // 已经核算过的不可操作 // 获取已经核算的数据 - List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeData(taxYearMonthStr); + List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeDataByTaxYearMonth(taxYearMonthStr); //税款所属期 Date taxYearMonth = SalaryDateUtil.localDateToDate(LocalDate.parse(taxYearMonthStr + "-01", SalaryDateUtil.DATE_FORMATTER)); // 查询已有数据 @@ -1175,7 +1175,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation LocalDate salaryMonthDate = LocalDate.parse(declareMonthStr + "-01", SalaryDateUtil.DATE_FORMATTER); salaryMonthDate = salaryMonthDate.plusMonths(1); String format = salaryMonthDate.atStartOfDay().format(DateTimeFormatter.ofPattern("yyyy-MM")); - List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeData(format); + List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeDataByTaxYearMonth(format); // 判断是否有核算过 List deletePOList = new ArrayList<>(); List deleteList = new ArrayList<>(); @@ -1253,7 +1253,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation LocalDate salaryMonthDate = LocalDate.parse(declareMonthStr + "-01", SalaryDateUtil.DATE_FORMATTER); String format = salaryMonthDate.plusMonths(1).atStartOfDay().format(DateTimeFormatter.ofPattern("yyyy-MM")); // 获取已经核算的数据 - List employees = getAddUpDeductionService(user).getAccountedEmployeeData(format); + List employees = getAddUpDeductionService(user).getAccountedEmployeeDataByTaxYearMonth(format); for (AddUpSituation item : list) { if (CollectionUtils.isNotEmpty(employees)) { Optional optionalAcctEmp = employees.stream().filter(f -> f.getEmployeeId().equals(item.getEmployeeId()) && f.getTaxAgentId().equals(item.getTaxAgentId())).findFirst(); diff --git a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java index 48648cc57..ee7e00713 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java @@ -371,7 +371,7 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa SalarySobPO salarySobPO = getSalarySobService(user).getById(salarySobId); // 根据薪资账套查询人员 - List salaryEmployees = getSalaryEmployeeService(user).listBySalarySobId(salarySobId); + List salaryEmployees = getSalaryEmployeeService(user).listBySalarySobId(salarySobId,false); if (CollectionUtils.isEmpty(salaryEmployees)) { errorMsg = errorMsg + "【" + salarySobPO.getName() + "】薪资账套没有人员; "; } else { diff --git a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java index 8d838f3ed..9cabcfbda 100644 --- a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java @@ -253,7 +253,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction //税款所属期 Date declareMonth = SalaryDateUtil.stringToDate(declareMonthStr + "-01"); // 获取已经核算的数据 - List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeData(declareMonthStr); + List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeDataByTaxYearMonth(declareMonthStr); // 查询已有数据 List list = getOtherDeductionMapper().listSome(OtherDeductionPO.builder().declareMonth(declareMonth).build()); @@ -439,7 +439,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction //税款所属期 Date declareMonth = SalaryDateUtil.stringToDate(declareMonthStr + "-01"); // 获取已经核算的数据 - List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeData(declareMonthStr); + List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeDataByTaxYearMonth(declareMonthStr); // 查询已有数据 List list = getOtherDeductionMapper().listSome(OtherDeductionPO.builder().declareMonth(declareMonth).build()); @@ -1848,7 +1848,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction throw new SalaryRunTimeException("该个税扣缴义务人无权限编辑此数据!"); } // 获取已经核算的数据 - List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeData(declareMonthStr); + List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeDataByTaxYearMonth(declareMonthStr); // 判断是否有核算过 if (CollectionUtils.isNotEmpty(salaryAcctEmployees)) { Optional optionalAcctEmp = salaryAcctEmployees.stream().filter(f -> f.getEmployeeId().equals(otherDeductionParam.getEmployeeId()) && f.getTaxAgentId().equals(otherDeductionParam.getTaxAgentId())).findFirst(); @@ -1905,7 +1905,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction //税款所属期 Date declareMonth = SalaryDateUtil.stringToDate(declareMonthStr + "-01"); // 获取已经核算的数据 - List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeData(declareMonthStr); + List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeDataByTaxYearMonth(declareMonthStr); // 查询已有数据 List list = getOtherDeductionMapper().listSome(OtherDeductionPO.builder().declareMonth(declareMonth).build()); //合规数据 @@ -1987,7 +1987,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction List deleteIds = deleteParam.getIds(); // 已经核算过的不可操作 // 获取已经核算的数据 - List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeData(declareMonthStr); + List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeDataByTaxYearMonth(declareMonthStr); // 判断是否有核算过 List deleteList = new ArrayList<>(); List resultList = new ArrayList<>(); @@ -2061,7 +2061,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction // 获取所有想要删除的数据 List list = otherDeductionBiz.listSome(queryParam); // 获取已经核算的数据 - List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeData(declareMonthStr); + List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeDataByTaxYearMonth(declareMonthStr); for (OtherDeductionPO item : list) { if (CollectionUtils.isNotEmpty(salaryAcctEmployees)) { Optional optionalAcctEmp = salaryAcctEmployees.stream().filter(f -> f.getEmployeeId().equals(item.getEmployeeId()) && f.getTaxAgentId().equals(item.getTaxAgentId())).findFirst(); @@ -2113,9 +2113,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction @Override public String extendToLastMonth(OtherDeductionExtendLastParam param) { //查询已经核算的数据 - List salaryAcctEmployees = - getAddUpDeductionService(user) - .getAccountedEmployeeData(param.getDeclareMonth()); + List salaryAcctEmployees = getAddUpDeductionService(user).getAccountedEmployeeDataByTaxYearMonth(param.getDeclareMonth()); Map> acctInfoMap = salaryAcctEmployees.stream() .distinct().collect(Collectors.groupingBy( i -> i.getTaxAgentId() + "" + i.getEmployeeId())); diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index e3608a60f..4d6aa148b 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -5092,8 +5092,11 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { List employeeList = new ArrayList<>(); if (!isFirstFlag) { // 不是首次核算,需要把社保历史数据取出 - historyDetailData.addAll(getInsuranceAccountDetailMapper().list(InsuranceAccountDetailParam.builder().billMonth(billMonth).paymentOrganization(paymentOrganization.toString()).employeeIds(ids).build())); - historyDetailData.addAll(getInsuranceAccountDetailMapper().extList(InsuranceAccountDetailParam.builder().billMonth(billMonth).paymentOrganization(paymentOrganization.toString()).employeeIds(ids).build())); + List> partition = Lists.partition(ids, 100); + partition.forEach(part -> { + historyDetailData.addAll(getInsuranceAccountDetailMapper().list(InsuranceAccountDetailParam.builder().billMonth(billMonth).paymentOrganization(paymentOrganization.toString()).employeeIds(part).build())); + historyDetailData.addAll(getInsuranceAccountDetailMapper().extList(InsuranceAccountDetailParam.builder().billMonth(billMonth).paymentOrganization(paymentOrganization.toString()).employeeIds(part).build())); + }); } else { employeeList = getSalaryEmployeeService(user).listByIds(ids); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index 7c05fdc41..54822e860 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -570,7 +570,7 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct @Override public void initBySalaryAcctRecord(SalaryAcctRecordPO salaryAcctRecordPO) { // 根据薪资账套查询人员 - List salaryEmployees = getSalaryEmployeeService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + List salaryEmployees = getSalaryEmployeeService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId(), true); if (CollectionUtils.isEmpty(salaryEmployees)) { return; } @@ -616,7 +616,7 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct } // 根据薪资账套查询人员 - List salaryEmployees = getSalaryEmployeeService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + List salaryEmployees = getSalaryEmployeeService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId(), true); if (CollectionUtils.isEmpty(salaryEmployees)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "未查询到账套下关联人员")); } diff --git a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java index c1ca1c508..d2b558d71 100644 --- a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java @@ -143,7 +143,7 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee } @Override - public List listBySalarySobId(Long salarySobId) { + public List listBySalarySobId(Long salarySobId, boolean hasExtEmp) { List includeSalaryEmployees = new ArrayList<>(); @@ -176,13 +176,15 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee } //外部人员 - List salarySobExtRangePOS = getSalarySobExtRangeService(user).listBySalarySobId(salarySobId); - if (CollectionUtils.isNotEmpty(salarySobExtRangePOS)) { - List ids = SalaryEntityUtil.properties(salarySobExtRangePOS, SalarySobExtRangePO::getTargetId, Collectors.toList()); - List extEmps = getExtEmpService(user).getEmployeeByIds(ids); - extEmps = extEmps.stream().distinct().collect(Collectors.toList()); + if(hasExtEmp){ + List salarySobExtRangePOS = getSalarySobExtRangeService(user).listBySalarySobId(salarySobId); + if (CollectionUtils.isNotEmpty(salarySobExtRangePOS)) { + List ids = SalaryEntityUtil.properties(salarySobExtRangePOS, SalarySobExtRangePO::getTargetId, Collectors.toList()); + List extEmps = getExtEmpService(user).getEmployeeByIds(ids); + extEmps = extEmps.stream().distinct().collect(Collectors.toList()); - includeSalaryEmployees.addAll(extEmps); + includeSalaryEmployees.addAll(extEmps); + } } if (!openSecondaryAccount) { @@ -679,11 +681,11 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee .departmentName(hrmSnapshotPO.getDepartmentname()) .departmentId(hrmSnapshotPO.getDepartmentid() == null ? null : NumberUtil.parseLong(Util.null2String(hrmSnapshotPO.getDepartmentid()))) .subcompanyName(hrmSnapshotPO.getSubcompanyname()) - .subcompanyid(hrmSnapshotPO.getSubcompanyid1() == null ? null :NumberUtil.parseLong(Util.null2String(hrmSnapshotPO.getSubcompanyid1()))) - .costcenterId(hrmSnapshotPO.getCostcenterid() == null ? null :NumberUtil.parseLong(Util.null2String(hrmSnapshotPO.getCostcenterid()))) - .locationId(hrmSnapshotPO.getLocationid() == null ? null :NumberUtil.parseLong(Util.null2String(hrmSnapshotPO.getLocationid()))) + .subcompanyid(hrmSnapshotPO.getSubcompanyid1() == null ? null : NumberUtil.parseLong(Util.null2String(hrmSnapshotPO.getSubcompanyid1()))) + .costcenterId(hrmSnapshotPO.getCostcenterid() == null ? null : NumberUtil.parseLong(Util.null2String(hrmSnapshotPO.getCostcenterid()))) + .locationId(hrmSnapshotPO.getLocationid() == null ? null : NumberUtil.parseLong(Util.null2String(hrmSnapshotPO.getLocationid()))) .jobtitleName(hrmSnapshotPO.getJobtitlename()) - .jobtitleId(hrmSnapshotPO.getJobtitle() == null ? null :NumberUtil.parseLong(Util.null2String(hrmSnapshotPO.getJobtitle()))) + .jobtitleId(hrmSnapshotPO.getJobtitle() == null ? null : NumberUtil.parseLong(Util.null2String(hrmSnapshotPO.getJobtitle()))) .companystartdate(hrmSnapshotPO.getCompanystartdate()) .mobile(hrmSnapshotPO.getMobile()) // .dismissdate() @@ -694,7 +696,7 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee .email(hrmSnapshotPO.getEmail()) .telephone(hrmSnapshotPO.getTelephone()) .jobcall(hrmSnapshotPO.getJobcallname()) - .jobcallId(hrmSnapshotPO.getJobcall() == null ? null :NumberUtil.parseLong(Util.null2String(hrmSnapshotPO.getJobcall()))) + .jobcallId(hrmSnapshotPO.getJobcall() == null ? null : NumberUtil.parseLong(Util.null2String(hrmSnapshotPO.getJobcall()))) .birthday(hrmSnapshotPO.getBirthday()) .workYear(hrmSnapshotPO.getWorkyear() == null ? null : hrmSnapshotPO.getWorkyear().doubleValue()) .companyWorkYear(hrmSnapshotPO.getCompanyworkyear() == null ? null : hrmSnapshotPO.getCompanyworkyear().doubleValue()) diff --git a/src/com/engine/salary/service/impl/SettingServiceImpl.java b/src/com/engine/salary/service/impl/SettingServiceImpl.java index 16771e0ea..3a2395b01 100644 --- a/src/com/engine/salary/service/impl/SettingServiceImpl.java +++ b/src/com/engine/salary/service/impl/SettingServiceImpl.java @@ -29,9 +29,12 @@ import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; +import com.engine.salary.util.excel.ExcelUtilPlus; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.util.valid.ValidUtil; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import weaver.file.ImageFileManager; import weaver.hrm.User; import java.util.*; @@ -329,6 +332,7 @@ public class SettingServiceImpl extends Service implements SettingService { .systemType(0) .limitIds(param.getLimitIds()) .setting(param.getSetting()) + .fileId(param.getFileId()) .creator((long) user.getUID()) .createTime(now) .updateTime(now) @@ -344,6 +348,7 @@ public class SettingServiceImpl extends Service implements SettingService { po.setSharedType(param.getSharedType()); po.setLimitIds(param.getLimitIds()); po.setSetting(param.getSetting()); + po.setFileId(param.getFileId()); po.setUpdateTime(now); getPageListTemplateMapper().updateIgnoreNull(po); } @@ -351,6 +356,21 @@ public class SettingServiceImpl extends Service implements SettingService { return po; } + @Override + public XSSFWorkbook downloadPageExportTemplateFile(DownloadTemplateParam param) { + List> rowList = new ArrayList<>(); + List heads = param.getHeads(); + List setting = param.getSetting(); + if (CollUtil.isEmpty(heads)||CollUtil.isEmpty(setting)||!Objects.equals(heads.size(), setting.size())){ + throw new SalaryRunTimeException("未选择字段"); + } + setting = setting.stream().map(s -> String.format("{.%s}", s)).collect(Collectors.toList()); + rowList.add(heads); + rowList.add(setting); + + return ExcelUtilPlus.genWorkbook(rowList, "薪资明细"); + } + @Override public void changePageListTemplate(PageListTemplateChangeParam param) { @@ -400,19 +420,31 @@ public class SettingServiceImpl extends Service implements SettingService { return CollectionUtil.isEmpty(limitIds) || CollectionUtil.intersection(limitIds, taxIds).size() != 0; } return true; - }).map(po -> PageListTemplateDTO.builder() - .id(po.getId()) - .page(po.getPage()) - .name(po.getName()) - .sharedType(po.getSharedType()) - .systemType(po.getSystemType()) - .sharedTypeName(SharedTypeEnum.parseByValue(po.getSharedType()).getDefaultLabel()) - .systemTypeName(po.getSystemType() == 1 ? "系统模板" : "自定义") - .limits(CollUtil.isEmpty(po.getLimitIds()) ? "所有" : Optional.ofNullable(po.getLimitIds()).orElse(new ArrayList<>()).stream().map(id -> idNameMap.getOrDefault(id, "")).collect(Collectors.joining(","))) - .limitIds(CollUtil.isEmpty(po.getLimitIds()) ? new ArrayList<>() : po.getLimitIds()) - .setting(po.getSetting()) - .canEdit(chief || (Objects.equals((long) user.getUID(), po.getCreator()) && po.getSystemType() == 0)) - .build()) + }).map(po -> { + Integer fileId = po.getFileId(); + String fileName = ""; + if (fileId != null) { + ImageFileManager imageFileManager = new ImageFileManager(); + imageFileManager.getImageFileInfoById(fileId); + fileName = imageFileManager.getImageFileName(); + } + + return PageListTemplateDTO.builder() + .id(po.getId()) + .page(po.getPage()) + .name(po.getName()) + .sharedType(po.getSharedType()) + .systemType(po.getSystemType()) + .sharedTypeName(SharedTypeEnum.parseByValue(po.getSharedType()).getDefaultLabel()) + .systemTypeName(po.getSystemType() == 1 ? "系统模板" : "自定义") + .limits(CollUtil.isEmpty(po.getLimitIds()) ? "所有" : Optional.ofNullable(po.getLimitIds()).orElse(new ArrayList<>()).stream().map(id -> idNameMap.getOrDefault(id, "")).collect(Collectors.joining(","))) + .limitIds(CollUtil.isEmpty(po.getLimitIds()) ? new ArrayList<>() : po.getLimitIds()) + .setting(po.getSetting()) + .canEdit(chief || (Objects.equals((long) user.getUID(), po.getCreator()) && po.getSystemType() == 0)) + .fileId(fileId) + .fileName(fileName) + .build(); + }) .collect(Collectors.toList()); return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), templateDTOS, PageListTemplateDTO.class); diff --git a/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java index 59b883897..7ed85fdd9 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java @@ -2,11 +2,11 @@ package com.engine.salary.service.impl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.common.LocalDateRange; import com.engine.salary.common.YearMonthRange; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; -import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; @@ -29,6 +29,8 @@ import com.engine.salary.mapper.datacollection.AddUpSituationMapper; import com.engine.salary.mapper.salaryacct.SalaryAcctRecordMapper; import com.engine.salary.mapper.taxdeclaration.TaxDeclarationMapper; import com.engine.salary.service.*; +import com.engine.salary.sys.service.SalarySysConfService; +import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; @@ -47,6 +49,8 @@ import java.time.YearMonth; import java.util.*; import java.util.stream.Collectors; +import static com.engine.salary.sys.constant.SalarySysConstant.TAX_DECLARATION_DATE_TYPE; + @Slf4j public class TaxDeclarationServiceImpl extends Service implements TaxDeclarationService { @@ -96,6 +100,13 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration return ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user); } + private SalarySysConfService getSalarySysConfService(User user) { + return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); + } + + //是否根据税款所属期进行申报 + private final boolean isTaxDeclarationByTaxCycle = "1".equals(getSalarySysConfService(user).getValueByCode(TAX_DECLARATION_DATE_TYPE)); + private TaxDeclareRecordService getTaxDeclareRecordService(User user) { return ServiceUtil.getService(TaxDeclareRecordServiceImpl.class, user); @@ -218,51 +229,96 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration // 查询个税扣缴义务人 List taxAgentPOS = getTaxAgentService(user).listByIds(taxAgentIds); Map taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgentPOS, TaxAgentPO::getId, TaxAgentPO::getName); + List salaryAcctRecordPOS; + Date taxCycle; + List salaryAcctResultPOS; + Set salaryAcctRecordIds; + //根据税款所属期申报 + if (isTaxDeclarationByTaxCycle) { + taxCycle = saveParam.getTaxCycle(); + if (Objects.isNull(taxCycle)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "税款所属期参数错误")); + } - // 薪资所属月的日期范围 - LocalDateRange salaryMonthDateRange = SalaryDateUtil.localDate2Range(saveParam.getSalaryMonth()); - if (Objects.isNull(salaryMonthDateRange)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "薪资所属月参数错误")); - } + // 查询税款所属期个税扣缴义务人已经生成过的个税申报表 + List taxDeclarationPOS = listByTaxCycle(TaxDeclarationPO.builder().taxCycle(taxCycle).taxAgentIds(taxAgentNameMap.keySet()).build()); + // 已经生成过个税申报表,不允许再次生成个税申报表 + if (CollectionUtils.isNotEmpty(taxDeclarationPOS)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(107986, "{0}在{1}已经生成过个税申报表,不允许再次生成") + .replace("{0}", taxAgentNameMap.get(taxDeclarationPOS.get(0).getTaxAgentId())) + .replace("{1}", SalaryDateUtil.getFormatYearMonth(taxCycle))); + } + // 查询薪资所属月的薪资核算记录 + salaryAcctRecordPOS = listByTaxCycle(SalaryAcctRecordPO.builder().taxCycle(taxCycle).build()); + // 无薪资核算记录,不允许生成个税申报表 + if (CollectionUtils.isEmpty(salaryAcctRecordPOS)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98874, "{0}无申报数据").replace("{0}", SalaryDateUtil.getFormatYearMonth(taxCycle))); + } + // 查询薪资核算结果 + salaryAcctResultPOS = getSalaryAcctResultService(user) + .listBySalaryAcctRecordIdsAndTaxAgentIds(SalaryEntityUtil.properties(salaryAcctRecordPOS, SalaryAcctRecordPO::getId), taxAgentIds); - // 查询薪资所属月个税扣缴义务人已经生成过的个税申报表 - List taxDeclarationPOS = listBySalaryMonthTax(TaxDeclarationPO.builder().salaryMonths(salaryMonthDateRange).taxAgentIds(taxAgentNameMap.keySet()).build()); - // 已经生成过个税申报表,不允许再次生成个税申报表 - if (CollectionUtils.isNotEmpty(taxDeclarationPOS)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(107986, "{0}在{1}已经生成过个税申报表,不允许再次生成") - .replace("{0}", taxAgentNameMap.get(taxDeclarationPOS.get(0).getTaxAgentId())) - .replace("{1}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); - } - // 查询薪资所属月的薪资核算记录 - List salaryAcctRecordPOS = listBySalaryMonth(SalaryAcctRecordPO.builder().salaryMonths(salaryMonthDateRange).build()); - // 无薪资核算记录,不允许生成个税申报表 - if (CollectionUtils.isEmpty(salaryAcctRecordPOS)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98874, "{0}无申报数据").replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); - } - // 查询薪资核算结果 - List salaryAcctResultPOS = getSalaryAcctResultService(user) - .listBySalaryAcctRecordIdsAndTaxAgentIds(SalaryEntityUtil.properties(salaryAcctRecordPOS, SalaryAcctRecordPO::getId), taxAgentIds); + // 无薪资核算结果,不允许生成个税申报表 + if (CollectionUtils.isEmpty(salaryAcctResultPOS)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(110093, "{0}无可申报数据") + .replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); + } - // 无薪资核算结果,不允许生成个税申报表 - if (CollectionUtils.isEmpty(salaryAcctResultPOS)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(110093, "{0}无可申报数据") - .replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); - } + salaryAcctRecordIds = SalaryEntityUtil.properties(salaryAcctResultPOS, SalaryAcctResultPO::getSalaryAcctRecordId); + salaryAcctRecordPOS = salaryAcctRecordPOS.stream().filter(salaryAcctRecordPO -> salaryAcctRecordIds.contains(salaryAcctRecordPO.getId())).collect(Collectors.toList()); + // 如果存在未归档的,也不允许生成个税申报表 + boolean notArchived = salaryAcctRecordPOS.stream().anyMatch(salaryAcctRecordPO -> Objects.equals(salaryAcctRecordPO.getStatus(), SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue())); + if (notArchived) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98875, "{0}有未归档数据,请全部归档后再申报") + .replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); + } + } else { + //根据薪资所属月申报 + // 薪资所属月的日期范围 + LocalDateRange salaryMonthDateRange = SalaryDateUtil.localDate2Range(saveParam.getSalaryMonth()); + if (Objects.isNull(salaryMonthDateRange)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "薪资所属月参数错误")); + } - Set salaryAcctRecordIds = SalaryEntityUtil.properties(salaryAcctResultPOS, SalaryAcctResultPO::getSalaryAcctRecordId); - salaryAcctRecordPOS = salaryAcctRecordPOS.stream().filter(salaryAcctRecordPO -> salaryAcctRecordIds.contains(salaryAcctRecordPO.getId())).collect(Collectors.toList()); - // 如果存在未归档的,也不允许生成个税申报表 - boolean notArchived = salaryAcctRecordPOS.stream().anyMatch(salaryAcctRecordPO -> Objects.equals(salaryAcctRecordPO.getStatus(), SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue())); - if (notArchived) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98875, "{0}有未归档数据,请全部归档后再申报") - .replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); - } - // 如果当前薪资所属月下存在不同的税款所属期,属于异常业务场景,不允许生成个税申报表 - Date taxCycle = salaryAcctRecordPOS.get(0).getTaxCycle(); - boolean differentTaxCycle = salaryAcctRecordPOS.stream().anyMatch(salaryAcctRecordPO -> salaryAcctRecordPO.getTaxCycle().compareTo(taxCycle) != 0); - if (differentTaxCycle) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98876, "{0}存在不同的税款所属期,无法正常生成个税申报表,请调整账套设置,重新核算后再生成个税申报表") - .replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); + // 查询薪资所属月个税扣缴义务人已经生成过的个税申报表 + List taxDeclarationPOS = listBySalaryMonthTax(TaxDeclarationPO.builder().salaryMonths(salaryMonthDateRange).taxAgentIds(taxAgentNameMap.keySet()).build()); + // 已经生成过个税申报表,不允许再次生成个税申报表 + if (CollectionUtils.isNotEmpty(taxDeclarationPOS)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(107986, "{0}在{1}已经生成过个税申报表,不允许再次生成") + .replace("{0}", taxAgentNameMap.get(taxDeclarationPOS.get(0).getTaxAgentId())) + .replace("{1}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); + } + // 查询薪资所属月的薪资核算记录 + salaryAcctRecordPOS = listBySalaryMonth(SalaryAcctRecordPO.builder().salaryMonths(salaryMonthDateRange).build()); + // 无薪资核算记录,不允许生成个税申报表 + if (CollectionUtils.isEmpty(salaryAcctRecordPOS)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98874, "{0}无申报数据").replace("{0}", saveParam.getSalaryMonth().toString())); + } + // 查询薪资核算结果 + salaryAcctResultPOS = getSalaryAcctResultService(user) + .listBySalaryAcctRecordIdsAndTaxAgentIds(SalaryEntityUtil.properties(salaryAcctRecordPOS, SalaryAcctRecordPO::getId), taxAgentIds); + + // 无薪资核算结果,不允许生成个税申报表 + if (CollectionUtils.isEmpty(salaryAcctResultPOS)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(110093, "{0}无可申报数据") + .replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); + } + + salaryAcctRecordIds = SalaryEntityUtil.properties(salaryAcctResultPOS, SalaryAcctResultPO::getSalaryAcctRecordId); + salaryAcctRecordPOS = salaryAcctRecordPOS.stream().filter(salaryAcctRecordPO -> salaryAcctRecordIds.contains(salaryAcctRecordPO.getId())).collect(Collectors.toList()); + // 如果存在未归档的,也不允许生成个税申报表 + boolean notArchived = salaryAcctRecordPOS.stream().anyMatch(salaryAcctRecordPO -> Objects.equals(salaryAcctRecordPO.getStatus(), SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue())); + if (notArchived) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98875, "{0}有未归档数据,请全部归档后再申报") + .replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); + } + // 如果当前薪资所属月下存在不同的税款所属期,属于异常业务场景,不允许生成个税申报表 + taxCycle = salaryAcctRecordPOS.get(0).getTaxCycle(); + boolean differentTaxCycle = salaryAcctRecordPOS.stream().anyMatch(salaryAcctRecordPO -> salaryAcctRecordPO.getTaxCycle().compareTo(taxCycle) != 0); + if (differentTaxCycle) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98876, "{0}存在不同的税款所属期,无法正常生成个税申报表,请调整账套设置,重新核算后再生成个税申报表") + .replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); + } } // 查询薪资账套 Set salarySobIds = SalaryEntityUtil.properties(salaryAcctRecordPOS, SalaryAcctRecordPO::getSalarySobId); @@ -311,8 +367,8 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration loggerContext.setTargetId(declare.getId().toString()); loggerContext.setTargetName(targetName); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "生成个税申报表")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "生成个税申报表")); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "生成个税申报表")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "生成个税申报表")); loggerContext.setNewValues(declare); SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); }); @@ -353,6 +409,14 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration return getSalaryAcctRecordMapper().listSome(po); } + public List listByTaxCycle(TaxDeclarationPO build) { + return getTaxDeclarationMapper().listSome(build); + } + + public List listByTaxCycle(SalaryAcctRecordPO po) { + return getSalaryAcctRecordMapper().listSome(po); + } + @Override public boolean checkByAuthority(TaxDeclarationPO taxDeclarationPO, Long employeeId) { // 判断是否开启了分权 @@ -395,15 +459,15 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration // 查询个税扣缴义务人名称 String bar = "_"; TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(po.getTaxAgentId()); - String targetName = SalaryDateUtil.getFormatYearMonth(po.getSalaryMonth()) + bar + taxAgentPO.getName() + bar + IncomeCategoryEnum.parseByValue(po.getIncomeCategory()).getDefaultLabel(); + String targetName = SalaryDateUtil.getFormatYearMonth(po.getSalaryMonth()) + bar + taxAgentPO.getName() + bar + IncomeCategoryEnum.parseByValue(po.getIncomeCategory()).getDefaultLabel(); // 记录日志 LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); loggerContext.setTargetId(taxDeclarationId.toString()); loggerContext.setTargetName(targetName); loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "撤回个税申报表")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "撤回个税申报表")); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "撤回个税申报表")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "撤回个税申报表")); SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); } diff --git a/src/com/engine/salary/sys/constant/SalarySysConstant.java b/src/com/engine/salary/sys/constant/SalarySysConstant.java index 7a3c052be..9013c9126 100644 --- a/src/com/engine/salary/sys/constant/SalarySysConstant.java +++ b/src/com/engine/salary/sys/constant/SalarySysConstant.java @@ -79,7 +79,7 @@ public class SalarySysConstant { /** * 个税申报撤回 */ - public static final String WITHDRAW_TAX_DECLARATION ="WITHDRAW_TAX_DECLARATION"; + public static final String WITHDRAW_TAX_DECLARATION = "WITHDRAW_TAX_DECLARATION"; /** * 删除薪资档案 @@ -124,7 +124,7 @@ public class SalarySysConstant { /** * 首次查看后多少分钟不能查看工资单 */ - public static final String SALARY_BILL_BURNING_AFTER_READING_MIN= "SALARY_BILL_BURNING_AFTER_READING_MIN"; + public static final String SALARY_BILL_BURNING_AFTER_READING_MIN = "SALARY_BILL_BURNING_AFTER_READING_MIN"; /** * 核算固定列头数 @@ -215,6 +215,15 @@ public class SalarySysConstant { */ public static final String SHOT_EMP_TIME_TYPE = "SHOT_EMP_TIME_TYPE"; - //是否采集考勤班次数据,0:关闭 1:开启 + /** + * 是否采集考勤班次数据,0:关闭 1:开启 + */ public static final String ATTENDANCE_SERIAL_COLLECTION_BTN = "ATTENDANCE_SERIAL_COLLECTION_BTN"; + + /** + * 报税日期类型,薪资所属月/税款所属期 + * 0:薪资所属月 1:税款所属期 + * 默认薪资所属月 + */ + public static final String TAX_DECLARATION_DATE_TYPE = "TAX_DECLARATION_DATE_TYPE"; } diff --git a/src/com/engine/salary/util/FileUtils.java b/src/com/engine/salary/util/FileUtils.java new file mode 100644 index 000000000..fe44a9192 --- /dev/null +++ b/src/com/engine/salary/util/FileUtils.java @@ -0,0 +1,88 @@ +package com.engine.salary.util; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; + +public class FileUtils { + private static final String COPY_FILE_SUFFIX = "_副本"; + + /** + * 将输入流写入文件 + * @param in 输入流 + * @param path 输出文件的路径 + * @param fileName 输出文件的名称 + * + * */ + public static void writeFile(InputStream in , String path , String fileName) throws FileNotFoundException { + + FileOutputStream outputStream = new FileOutputStream(""); + + } + + + /** + * 给定一个目录和文件,若该目录存在名称相同的文件,则返回一个可用的副本文件名,否则直接返回输入的文件名。 + * @param path 文件的目录 + * @param fileName 文件名 + * @return 可用的文件名 + * */ + public static String getAvailableName(String path ,String fileName){ + + File filePath = new File(path); + + String suffix = fileName.substring(fileName.lastIndexOf(".")); + File[] files = filePath.listFiles( f -> f.getName().endsWith(suffix) ); + if ( Objects.isNull(files) ) return fileName; + + Set fileNameSet = new HashSet<>(); + for (File file: files ) { + fileNameSet.add(file.getName().substring(0 , file.getName().lastIndexOf("."))); + } + + boolean isExist = true; + int count = 1; + String tempFileName = fileName.substring(0,fileName.lastIndexOf(".")); + String tempFileName1 = tempFileName; + while(isExist){ + + if (fileNameSet.contains(tempFileName)){ + tempFileName = tempFileName1 + COPY_FILE_SUFFIX + count++; + }else{ + isExist = false; + } + + } + + return tempFileName + suffix; + } + + + /** + * 给定一个文件的完整路径,若该文件已经存在,则返回一个可用的副本文件名,否则直接返回输入的文件名。 + * @param fullPath 文件的完整路径 + * @return 可用的文件名 + * */ + public static String getAvailableName( String fullPath ){ + File file = new File(fullPath); + if ( !file.isFile() ) throw new RuntimeException( String.format("not a file [%s].",fullPath)); + + return getAvailableName( file.getParent() ,file.getName() ); + } + + /** + * 给定一个文件的完整路径,若该文件已经存在,则返回一个完整可用的副本文件名,否则直接返回输入的文件名。 + * @param fullPath 文件的完整路径 + * @return 完整可用的文件名 + * */ + public static String getAvailableFullName( String fullPath ){ + File file = new File(fullPath); + if ( !file.isFile() ) throw new RuntimeException( String.format("not a file [%s].",fullPath)); + + return file.getParent() + File.separator + getAvailableName(fullPath); + } +} diff --git a/src/com/engine/salary/util/excel/ExcelFillUtils.java b/src/com/engine/salary/util/excel/ExcelFillUtils.java new file mode 100644 index 000000000..df3d1a507 --- /dev/null +++ b/src/com/engine/salary/util/excel/ExcelFillUtils.java @@ -0,0 +1,204 @@ +package com.engine.salary.util.excel; + +import cn.hutool.core.util.StrUtil; +import com.engine.salary.util.FileUtils; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellUtil; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.regex.Pattern; + +public class ExcelFillUtils { + + // public static final String FILL_EXPRESSION_REGEX = "\\{\\.\\w+\\}"; + private static final String FILL_EXPRESSION_REGEX = "\\{\\.[\\p{L}\\p{M}\\S]+\\}"; + + + /** + * 给定模板,指定某个页签,将数据填充到模板中的指定页签,并将数据导入到指定文件上。 + * + * @param template 模板文件地址 + * @param sheetIndex 页签下标 + * @param data 待填充的数据,数据格式如下 + * [ + * {"colName1":v1 ,"colName2":v2...}, + * {"colName1":v1 ,"colName2":v2...} + * ,... + * ] + * @return 新生成的副本文件 + */ + public static XSSFWorkbook fillOneSheet(String template, Integer sheetIndex, List> data) { + + try { + XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(template)); + fill(workbook, sheetIndex, data);//填充数据 + return workbook; + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + /** + * 给定模板,指定某个页签,将数据填充到模板中的指定页签,并将数据导入到指定文件上。 + * + * @param template 模板文件流 + * @param sheetIndex 页签名称 + * @param data 待填充的数据,数据格式如下 + * [ + * {"colName1":v1 ,"colName2":v2...}, + * {"colName1":v1 ,"colName2":v2...} + * ,... + * ] + * @return 新生成的副本文件 + */ + public static XSSFWorkbook fillOneSheet(InputStream template, Integer sheetIndex, List> data) { + + try{ + XSSFWorkbook workbook = new XSSFWorkbook(template); + fill(workbook, sheetIndex, data);//填充数据 + return workbook; + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + /** + * 给定模板,将数据填充到模板中的多个页签,并在模板所在目录生成新的副本文件。 + * + * @param template 模板文件地址 + * @param datas 待填充的数据集,数据格式如下 + * { + * "SheetName1":[ + * {"colName1":v1 ,"colName2":v2...}, + * {"colName1":v1 ,"colName2":v2...} + * ,... + * ], + * "SheetName2":[ + * {"colName1":v1 ,"colName2":v2...} + * {"colName1":v1 ,"colName2":v2...} + * ,... + * ], + * ... + * } + */ + public static String fillMultipleSheet(String template, Map>> datas) { + return fillMultipleSheet(template, FileUtils.getAvailableFullName(template), datas); + } + + /** + * 给定模板,将数据填充到模板中的多个页签,并将数据导入到指定文件上。 + * + * @param template 模板文件地址 + * @param datas 待填充的数据集,数据格式如下 + * { + * "SheetName1":[ + * {"colName1":v1 ,"colName2":v2...}, + * {"colName1":v1 ,"colName2":v2...} + * ,... + * ], + * "SheetName2":[ + * {"colName1":v1 ,"colName2":v2...} + * {"colName1":v1 ,"colName2":v2...} + * ,... + * ], + * ... + * } + */ + public static String fillMultipleSheet(String template, String outputFile, Map>> datas) { + + try (Workbook workbook = new XSSFWorkbook(new FileInputStream(template))) { + + datas.forEach((sheetIndex, data) -> fill(workbook, sheetIndex, data));//填充数据 + refreshFormula(workbook);//刷新公式 + + try (FileOutputStream outputStream = new FileOutputStream(outputFile)) { + workbook.write(outputStream); + } catch (Exception e) { + throw new RuntimeException(e); + } + + } catch (IOException e) { + throw new RuntimeException(e); + } + + return outputFile; + } + + private static Workbook fill(Workbook workbook, int sheetIndex, List> data) { + + Sheet sheet = workbook.getSheetAt(sheetIndex); + if (sheet == null) { + throw new RuntimeException(String.format("sheet [%s] does not exist.", sheetIndex)); + } + + //找到所有的表达式单元格 + Map expressionCellMap = new HashMap<>(); + for (int i = 0; i < sheet.getPhysicalNumberOfRows(); i++) { + Row row = sheet.getRow(i); + for (int j = 0; j < row.getPhysicalNumberOfCells(); j++) { + Cell cell = row.getCell(j); + if (!Objects.isNull(cell) && isFillExpression(cell.getStringCellValue())) {//判断该单元格是否是填充公式 + expressionCellMap.put(getColNameFromEx(cell.getStringCellValue()), cell); + } + } + } + + //填充数据 + for (int i = 0; i < data.size(); i++) { + Map dataRow = data.get(i); + for (Map.Entry entry : dataRow.entrySet()) { + String colName = entry.getKey(); + Object value = entry.getValue(); + if (expressionCellMap.containsKey(colName)) { + + Cell cell = expressionCellMap.get(colName);//公式所在的单元格 + int rowID = cell.getRowIndex() + i; + int colId = cell.getColumnIndex(); + + Row fillRow = sheet.getRow(rowID); + fillRow = Objects.isNull(fillRow) ? sheet.createRow(rowID) : fillRow; + Cell fillCell = fillRow.getCell(colId); + //创建的新单元格需要复制公式单元格的格式 + fillCell = Objects.isNull(fillCell) ? CellUtil.createCell(fillRow, colId, "", cell.getCellStyle()) : fillCell; + + if (value instanceof String) { + fillCell.setCellValue(String.valueOf(value)); + } else if (value instanceof Number) { + fillCell.setCellValue(((Number) value).doubleValue()); + } else { + throw new RuntimeException(String.format("Unsupported data type [%s].", value.getClass().toString())); + } + + } + } + } + + return workbook; + } + + private static void refreshFormula(Workbook workbook) { + FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); + evaluator.evaluateAll(); + } + + private static boolean isFillExpression(String ex) { + if (StrUtil.isBlank(ex)) { + return false; + } + ; + return Pattern.matches(FILL_EXPRESSION_REGEX, ex); + } + + private static String getColNameFromEx(String ex) { + if (!isFillExpression(ex)) throw new RuntimeException("Illegal expression " + ex); + return ex.substring(2, ex.length() - 1); + } +} diff --git a/src/com/engine/salary/web/SalaryCommonController.java b/src/com/engine/salary/web/SalaryCommonController.java index 5f366bc2b..96d6e9ab5 100644 --- a/src/com/engine/salary/web/SalaryCommonController.java +++ b/src/com/engine/salary/web/SalaryCommonController.java @@ -16,6 +16,7 @@ import com.engine.salary.util.page.PageInfo; import com.engine.salary.wrapper.SalaryCommonWrapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; import lombok.extern.slf4j.Slf4j; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; @@ -24,6 +25,11 @@ import javax.servlet.http.HttpServletResponse; import javax.ws.rs.*; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.StreamingOutput; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.time.LocalDate; import java.util.List; import java.util.Map; @@ -157,6 +163,35 @@ public class SalaryCommonController { return new ResponseResult(user).run(getSalaryCommonWrapper(user)::savePageListTemplate, param); } + @POST + @Path("/pageList/template/file/download") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response downloadPageExportTemplateFile(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody DownloadTemplateParam param) { + try { + User user = HrmUserVarify.getUser(request, response); + + XSSFWorkbook workbook = getSalaryCommonWrapper(user).downloadPageExportTemplateFile(param); + + String 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; + } + } + @POST @Path("/pageList/template/delete") @Produces(MediaType.APPLICATION_JSON) diff --git a/src/com/engine/salary/wrapper/SalaryCommonWrapper.java b/src/com/engine/salary/wrapper/SalaryCommonWrapper.java index 7a961cb35..64b1a1660 100644 --- a/src/com/engine/salary/wrapper/SalaryCommonWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryCommonWrapper.java @@ -17,6 +17,7 @@ import com.engine.salary.service.impl.SalarySobItemServiceImpl; import com.engine.salary.service.impl.SettingServiceImpl; import com.engine.salary.util.JsonUtil; import com.engine.salary.util.page.PageInfo; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import com.engine.salary.util.page.SalaryPageUtil; import org.apache.commons.lang3.StringUtils; import weaver.hrm.User; @@ -97,6 +98,10 @@ public class SalaryCommonWrapper extends Service { return getSettingService(user).savePageListTemplate(param); } + public XSSFWorkbook downloadPageExportTemplateFile(DownloadTemplateParam param) { + return getSettingService(user).downloadPageExportTemplateFile(param); + } + public void deletePageListTemplate(PageListTemplateDeleteParam param) { getSettingService(user).deletePageListTemplate(param); }