From dce7f684a5cc396912d006b315955bd9587d3901 Mon Sep 17 00:00:00 2001 From: sy Date: Fri, 23 Feb 2024 11:34:48 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E5=8F=B0=E8=B4=A6=EF=BC=8C=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=88=86=E6=9D=83=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SIAccountServiceImpl.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 857196426..f4a03e1c9 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -241,8 +241,10 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { if (CollectionUtils.isEmpty(taxAgents)) { //防止普通用户查询 queryParam.setTaxAgents(Collections.singletonList(-1L)); - } else if (paymentOrganizationIds != null && paymentOrganizationIds.size() > 0){ - taxAgents.retainAll(paymentOrganizationIds); + } else { + if (paymentOrganizationIds != null && paymentOrganizationIds.size() > 0) { + taxAgents.retainAll(paymentOrganizationIds); + } queryParam.setTaxAgents(taxAgents); } } From 4775d8683aa60ed35c120b61428679094377ebf9 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 23 Feb 2024 11:42:36 +0800 Subject: [PATCH 2/8] =?UTF-8?q?fix=E8=B0=83=E8=96=AA=E5=8E=9F=E5=9B=A0valu?= =?UTF-8?q?e=E5=80=BC=E7=9B=B8=E5=90=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryarchive/SalaryArchiveItemAdjustReasonEnum.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/enums/salaryarchive/SalaryArchiveItemAdjustReasonEnum.java b/src/com/engine/salary/enums/salaryarchive/SalaryArchiveItemAdjustReasonEnum.java index fb3f761cc..626635040 100644 --- a/src/com/engine/salary/enums/salaryarchive/SalaryArchiveItemAdjustReasonEnum.java +++ b/src/com/engine/salary/enums/salaryarchive/SalaryArchiveItemAdjustReasonEnum.java @@ -19,9 +19,9 @@ public enum SalaryArchiveItemAdjustReasonEnum implements BaseEnum { ONBOARD("ONBOARD", "入职", 85901), PROBATION_REVIEW("PROBATION_REVIEW", "转正", 85984), SALARY_ADJUSTMENT("SALARY_ADJUSTMENT", "调薪", 85985), - PROMOTION("SALARY_ADJUSTMENT", "晋升", 85985), - DEMOTION("SALARY_ADJUSTMENT", "降职", 85985), - JOB_TRANSFER("SALARY_ADJUSTMENT", "调岗", 85985), + PROMOTION("PROMOTION", "晋升", 85985), + DEMOTION("DEMOTION", "降职", 85985), + JOB_TRANSFER("JOB_TRANSFER", "调岗", 85985), POSITION_OR_SALARY_ADJUSTMENT("POSITION_OR_SALARY_ADJUSTMENT", "调岗调薪", 85986), DIMISSION("DIMISSION", "离职", 85902), OTHER("OTHER", "其他", 84500), From f11d6a035c77e5038f82635775c7558ddd538077 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 26 Feb 2024 15:40:52 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E5=8E=BB=E9=99=A4pagehelper=20jar=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/WEB-INF/lib/pagehelper-5.0.0.jar | Bin 64807 -> 0 bytes src/com/engine/salary/common/Page.java | 170 ++++++++ src/com/engine/salary/common/PageInfo.java | 380 ++++++++++++++++++ .../salary/component/PageInterceptor.java | 2 +- .../service/impl/SIAccountServiceImpl.java | 2 - src/com/engine/salary/util/page/PageInfo.java | 2 +- .../salary/util/page/SalaryPageUtil.java | 8 - 7 files changed, 552 insertions(+), 12 deletions(-) delete mode 100644 resource/WEB-INF/lib/pagehelper-5.0.0.jar create mode 100644 src/com/engine/salary/common/Page.java create mode 100644 src/com/engine/salary/common/PageInfo.java diff --git a/resource/WEB-INF/lib/pagehelper-5.0.0.jar b/resource/WEB-INF/lib/pagehelper-5.0.0.jar deleted file mode 100644 index 187266c88e16a5edcc1bfe59dd26ac34198ba202..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64807 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�w!i% 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

I>gysFLDtV8NO!7@O{V-^~ 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 Wg$BHsi@5_ASQ9YwRb09F>;C` extends ArrayList { + private static final long serialVersionUID = 1L; + + /** + * 页码,从1开始 + */ + private int pageNum; + /** + * 页面大小 + */ + private int pageSize; + /** + * 起始行 + */ + private int startRow; + /** + * 末行 + */ + private int endRow; + /** + * 总数 + */ + private long total; + /** + * 总页数 + */ + private int pages; + /** + * 包含count查询 + */ + private boolean count = true; + /** + * 分页合理化 + */ + private Boolean reasonable; + /** + * 当设置为true的时候,如果pagesize设置为0(或RowBounds的limit=0),就不执行分页,返回全部结果 + */ + private Boolean pageSizeZero; + + public Page() { + super(); + } + + + /** + * int[] rowBounds + * 0 : offset + * 1 : limit + */ + public Page(int[] rowBounds, boolean count) { + super(0); + if (rowBounds[0] == 0 && rowBounds[1] == Integer.MAX_VALUE) { + pageSizeZero = true; + this.pageSize = 0; + } else { + this.pageSize = rowBounds[1]; + this.pageNum = rowBounds[1] != 0 ? (int) (Math.ceil(((double) rowBounds[0] + rowBounds[1]) / rowBounds[1])) : 0; + } + this.startRow = rowBounds[0]; + this.count = count; + this.endRow = this.startRow + rowBounds[1]; + } + + public List getResult() { + return this; + } + + public int getPages() { + return pages; + } + + + public int getEndRow() { + return endRow; + } + + + public int getPageNum() { + return pageNum; + } + + + public int getPageSize() { + return pageSize; + } + + + public int getStartRow() { + return startRow; + } + + + public long getTotal() { + return total; + } + + public void setTotal(long total) { + this.total = total; + if (total == -1) { + pages = 1; + return; + } + if (pageSize > 0) { + pages = (int) (total / pageSize + ((total % pageSize == 0) ? 0 : 1)); + } else { + pages = 0; + } + //分页合理化,针对不合理的页码自动处理 + if ((reasonable != null && reasonable) && pageNum > pages) { + pageNum = pages; + calculateStartAndEndRow(); + } + } + + public Boolean getReasonable() { + return reasonable; + } + + + public Boolean getPageSizeZero() { + return pageSizeZero; + } + + + /** + * 计算起止行号 + */ + private void calculateStartAndEndRow() { + this.startRow = this.pageNum > 0 ? (this.pageNum - 1) * this.pageSize : 0; + this.endRow = this.startRow + this.pageSize * (this.pageNum > 0 ? 1 : 0); + } + + public boolean isCount() { + return this.count; + } + + + /** + * 转换为PageInfo + * + * @return + */ + public com.engine.salary.common.PageInfo toPageInfo() { + com.engine.salary.common.PageInfo pageInfo = new com.engine.salary.common.PageInfo(this); + return pageInfo; + } + + + @Override + public String toString() { + return "Page{" + + "count=" + count + + ", pageNum=" + pageNum + + ", pageSize=" + pageSize + + ", startRow=" + startRow + + ", endRow=" + endRow + + ", total=" + total + + ", pages=" + pages + + ", reasonable=" + reasonable + + ", pageSizeZero=" + pageSizeZero + + '}'; + } +} \ No newline at end of file diff --git a/src/com/engine/salary/common/PageInfo.java b/src/com/engine/salary/common/PageInfo.java new file mode 100644 index 000000000..6042f3e29 --- /dev/null +++ b/src/com/engine/salary/common/PageInfo.java @@ -0,0 +1,380 @@ +package com.engine.salary.common; + + +import java.io.Serializable; +import java.util.Collection; +import java.util.List; + +/** + * 对Page 结果进行包装 + * pageHelper的替代 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public class PageInfo implements Serializable { + private static final long serialVersionUID = 1L; + //当前页 + private int pageNum; + //每页的数量 + private int pageSize; + //当前页的数量 + private int size; + + //由于startRow和endRow不常用,这里说个具体的用法 + //可以在页面中"显示startRow到endRow 共size条数据" + + //当前页面第一个元素在数据库中的行号 + private int startRow; + //当前页面最后一个元素在数据库中的行号 + private int endRow; + //总记录数 + private long total; + //总页数 + private int pages; + //结果集 + private List list; + + //前一页 + private int prePage; + //下一页 + private int nextPage; + + //是否为第一页 + private boolean isFirstPage = false; + //是否为最后一页 + private boolean isLastPage = false; + //是否有前一页 + private boolean hasPreviousPage = false; + //是否有下一页 + private boolean hasNextPage = false; + //导航页码数 + private int navigatePages; + //所有导航页号 + private int[] navigatepageNums; + //导航条上的第一页 + private int navigateFirstPage; + //导航条上的最后一页 + private int navigateLastPage; + + public PageInfo() { + } + + /** + * 包装Page对象 + * + * @param list + */ + public PageInfo(List list) { + this(list, 8); + } + + /** + * 包装Page对象 + * + * @param list page结果 + * @param navigatePages 页码数量 + */ + public PageInfo(List list, int navigatePages) { + if (list instanceof Page) { + Page page = (Page) list; + this.pageNum = page.getPageNum(); + this.pageSize = page.getPageSize(); + + this.pages = page.getPages(); + this.list = page; + this.size = page.size(); + this.total = page.getTotal(); + //由于结果是>startRow的,所以实际的需要+1 + if (this.size == 0) { + this.startRow = 0; + this.endRow = 0; + } else { + this.startRow = page.getStartRow() + 1; + //计算实际的endRow(最后一页的时候特殊) + this.endRow = this.startRow - 1 + this.size; + } + } else if (list instanceof Collection) { + this.pageNum = 1; + this.pageSize = list.size(); + + this.pages = 1; + this.list = list; + this.size = list.size(); + this.total = list.size(); + this.startRow = 0; + this.endRow = list.size() > 0 ? list.size() - 1 : 0; + } + if (list instanceof Collection) { + this.navigatePages = navigatePages; + //计算导航页 + calcNavigatepageNums(); + //计算前后页,第一页,最后一页 + calcPage(); + //判断页面边界 + judgePageBoudary(); + } + } + + /** + * 计算导航页 + */ + private void calcNavigatepageNums() { + //当总页数小于或等于导航页码数时 + if (pages <= navigatePages) { + navigatepageNums = new int[pages]; + for (int i = 0; i < pages; i++) { + navigatepageNums[i] = i + 1; + } + } else { //当总页数大于导航页码数时 + navigatepageNums = new int[navigatePages]; + int startNum = pageNum - navigatePages / 2; + int endNum = pageNum + navigatePages / 2; + + if (startNum < 1) { + startNum = 1; + //(最前navigatePages页 + for (int i = 0; i < navigatePages; i++) { + navigatepageNums[i] = startNum++; + } + } else if (endNum > pages) { + endNum = pages; + //最后navigatePages页 + for (int i = navigatePages - 1; i >= 0; i--) { + navigatepageNums[i] = endNum--; + } + } else { + //所有中间页 + for (int i = 0; i < navigatePages; i++) { + navigatepageNums[i] = startNum++; + } + } + } + } + + /** + * 计算前后页,第一页,最后一页 + */ + private void calcPage() { + if (navigatepageNums != null && navigatepageNums.length > 0) { + navigateFirstPage = navigatepageNums[0]; + navigateLastPage = navigatepageNums[navigatepageNums.length - 1]; + if (pageNum > 1) { + prePage = pageNum - 1; + } + if (pageNum < pages) { + nextPage = pageNum + 1; + } + } + } + + /** + * 判定页面边界 + */ + private void judgePageBoudary() { + isFirstPage = pageNum == 1; + isLastPage = pageNum == pages; + hasPreviousPage = pageNum > 1; + hasNextPage = pageNum < pages; + } + + public int getPageNum() { + return pageNum; + } + + public void setPageNum(int pageNum) { + this.pageNum = pageNum; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getSize() { + return size; + } + + public void setSize(int size) { + this.size = size; + } + + public int getStartRow() { + return startRow; + } + + public void setStartRow(int startRow) { + this.startRow = startRow; + } + + public int getEndRow() { + return endRow; + } + + public void setEndRow(int endRow) { + this.endRow = endRow; + } + + public long getTotal() { + return total; + } + + public void setTotal(long total) { + this.total = total; + } + + public int getPages() { + return pages; + } + + public void setPages(int pages) { + this.pages = pages; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + @Deprecated + // firstPage就是1, 此函数获取的是导航条上的第一页, 容易产生歧义 + public int getFirstPage() { + return navigateFirstPage; + } + + @Deprecated + public void setFirstPage(int firstPage) { + this.navigateFirstPage = firstPage; + } + + public int getPrePage() { + return prePage; + } + + public void setPrePage(int prePage) { + this.prePage = prePage; + } + + public int getNextPage() { + return nextPage; + } + + public void setNextPage(int nextPage) { + this.nextPage = nextPage; + } + + @Deprecated + // 请用getPages()来获取最后一页, 此函数获取的是导航条上的最后一页, 容易产生歧义. + public int getLastPage() { + return navigateLastPage; + } + + @Deprecated + public void setLastPage(int lastPage) { + this.navigateLastPage = lastPage; + } + + public boolean isIsFirstPage() { + return isFirstPage; + } + + public void setIsFirstPage(boolean isFirstPage) { + this.isFirstPage = isFirstPage; + } + + public boolean isIsLastPage() { + return isLastPage; + } + + public void setIsLastPage(boolean isLastPage) { + this.isLastPage = isLastPage; + } + + public boolean isHasPreviousPage() { + return hasPreviousPage; + } + + public void setHasPreviousPage(boolean hasPreviousPage) { + this.hasPreviousPage = hasPreviousPage; + } + + public boolean isHasNextPage() { + return hasNextPage; + } + + public void setHasNextPage(boolean hasNextPage) { + this.hasNextPage = hasNextPage; + } + + public int getNavigatePages() { + return navigatePages; + } + + public void setNavigatePages(int navigatePages) { + this.navigatePages = navigatePages; + } + + public int[] getNavigatepageNums() { + return navigatepageNums; + } + + public void setNavigatepageNums(int[] navigatepageNums) { + this.navigatepageNums = navigatepageNums; + } + + public int getNavigateFirstPage() { + return navigateFirstPage; + } + + public int getNavigateLastPage() { + return navigateLastPage; + } + + public void setNavigateFirstPage(int navigateFirstPage) { + this.navigateFirstPage = navigateFirstPage; + } + + public void setNavigateLastPage(int navigateLastPage) { + this.navigateLastPage = navigateLastPage; + } + + @Override + public String toString() { + final StringBuffer sb = new StringBuffer("PageInfo{"); + sb.append("pageNum=").append(pageNum); + sb.append(", pageSize=").append(pageSize); + sb.append(", size=").append(size); + sb.append(", startRow=").append(startRow); + sb.append(", endRow=").append(endRow); + sb.append(", total=").append(total); + sb.append(", pages=").append(pages); + sb.append(", list=").append(list); + sb.append(", prePage=").append(prePage); + sb.append(", nextPage=").append(nextPage); + sb.append(", isFirstPage=").append(isFirstPage); + sb.append(", isLastPage=").append(isLastPage); + sb.append(", hasPreviousPage=").append(hasPreviousPage); + sb.append(", hasNextPage=").append(hasNextPage); + sb.append(", navigatePages=").append(navigatePages); + sb.append(", navigateFirstPage").append(navigateFirstPage); + sb.append(", navigateLastPage").append(navigateLastPage); + sb.append(", navigatepageNums="); + if (navigatepageNums == null) sb.append("null"); + else { + sb.append('['); + for (int i = 0; i < navigatepageNums.length; ++i) + sb.append(i == 0 ? "" : ", ").append(navigatepageNums[i]); + sb.append(']'); + } + sb.append('}'); + return sb.toString(); + } +} diff --git a/src/com/engine/salary/component/PageInterceptor.java b/src/com/engine/salary/component/PageInterceptor.java index 50958baf7..41a7aaa9c 100644 --- a/src/com/engine/salary/component/PageInterceptor.java +++ b/src/com/engine/salary/component/PageInterceptor.java @@ -1,7 +1,7 @@ package com.engine.salary.component; -import com.github.pagehelper.Page; +import com.engine.salary.common.Page; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.binding.MapperMethod; import org.apache.ibatis.executor.parameter.ParameterHandler; diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index f4a03e1c9..10ccd0a3d 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -512,7 +512,6 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { OrderRuleVO orderRule = getSalarySysConfService(user).orderRule(); queryParam.setOrderRule(orderRule); - SalaryPageUtil.start(queryParam.getCurrent(), queryParam.getPageSize()); //系统人员核算明细 List list = getInsuranceAccountDetailMapper().list(queryParam); //非系统人员核算明细 @@ -3833,7 +3832,6 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { OrderRuleVO orderRule = getSalarySysConfService(user).orderRule(); queryParam.setOrderRule(orderRule); - SalaryPageUtil.start(queryParam.getCurrent(), queryParam.getPageSize()); //系统人员核算明细 List list = getInsuranceAccountDetailMapper().list(queryParam); //非系统人员核算明细 diff --git a/src/com/engine/salary/util/page/PageInfo.java b/src/com/engine/salary/util/page/PageInfo.java index 86f73f742..e2c82da5a 100644 --- a/src/com/engine/salary/util/page/PageInfo.java +++ b/src/com/engine/salary/util/page/PageInfo.java @@ -10,7 +10,7 @@ import java.util.List; @Data @ToString -public class PageInfo extends com.github.pagehelper.PageInfo { +public class PageInfo extends com.engine.salary.common.PageInfo { Class clazz; public void setColumns(List columns) { diff --git a/src/com/engine/salary/util/page/SalaryPageUtil.java b/src/com/engine/salary/util/page/SalaryPageUtil.java index a91fe1d2a..d0a685913 100644 --- a/src/com/engine/salary/util/page/SalaryPageUtil.java +++ b/src/com/engine/salary/util/page/SalaryPageUtil.java @@ -1,6 +1,5 @@ package com.engine.salary.util.page; -import com.github.pagehelper.PageHelper; import org.apache.commons.collections4.CollectionUtils; import java.awt.*; @@ -13,13 +12,6 @@ import java.util.List; public class SalaryPageUtil { - public static void start(Integer pageNum, Integer pageSize) { - pageNum = pageNum == null || pageNum <= 0 ? 1 : pageNum; - pageSize = pageSize == null || pageSize <= 0 ? 10 : pageSize; - PageHelper.startPage(pageNum, pageSize); - } - - public static PageInfo buildPage(Integer pageNo, Integer pageSize) { pageNo = pageNo == null || pageNo <= 0 ? 1 : pageNo; pageSize = pageSize == null || pageSize <= 0 ? 10 : pageSize; From 9e8fbbef89a5c04428b48306cc06ee5a14e8e659 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 26 Feb 2024 16:25:17 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E5=8E=BB=E9=99=A4pagehelper=20jar=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/{common => component}/Page.java | 6 +++--- src/com/engine/salary/{common => component}/PageInfo.java | 2 +- src/com/engine/salary/component/PageInterceptor.java | 1 - src/com/engine/salary/util/page/PageInfo.java | 2 +- 4 files changed, 5 insertions(+), 6 deletions(-) rename src/com/engine/salary/{common => component}/Page.java (94%) rename src/com/engine/salary/{common => component}/PageInfo.java (99%) diff --git a/src/com/engine/salary/common/Page.java b/src/com/engine/salary/component/Page.java similarity index 94% rename from src/com/engine/salary/common/Page.java rename to src/com/engine/salary/component/Page.java index 726165bbb..a23215bfb 100644 --- a/src/com/engine/salary/common/Page.java +++ b/src/com/engine/salary/component/Page.java @@ -1,4 +1,4 @@ -package com.engine.salary.common; +package com.engine.salary.component; import java.util.ArrayList; @@ -147,8 +147,8 @@ public class Page extends ArrayList { * * @return */ - public com.engine.salary.common.PageInfo toPageInfo() { - com.engine.salary.common.PageInfo pageInfo = new com.engine.salary.common.PageInfo(this); + public PageInfo toPageInfo() { + PageInfo pageInfo = new PageInfo(this); return pageInfo; } diff --git a/src/com/engine/salary/common/PageInfo.java b/src/com/engine/salary/component/PageInfo.java similarity index 99% rename from src/com/engine/salary/common/PageInfo.java rename to src/com/engine/salary/component/PageInfo.java index 6042f3e29..6a630a6e4 100644 --- a/src/com/engine/salary/common/PageInfo.java +++ b/src/com/engine/salary/component/PageInfo.java @@ -1,4 +1,4 @@ -package com.engine.salary.common; +package com.engine.salary.component; import java.io.Serializable; diff --git a/src/com/engine/salary/component/PageInterceptor.java b/src/com/engine/salary/component/PageInterceptor.java index 41a7aaa9c..a41d739dd 100644 --- a/src/com/engine/salary/component/PageInterceptor.java +++ b/src/com/engine/salary/component/PageInterceptor.java @@ -1,7 +1,6 @@ package com.engine.salary.component; -import com.engine.salary.common.Page; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.binding.MapperMethod; import org.apache.ibatis.executor.parameter.ParameterHandler; diff --git a/src/com/engine/salary/util/page/PageInfo.java b/src/com/engine/salary/util/page/PageInfo.java index e2c82da5a..da8313a78 100644 --- a/src/com/engine/salary/util/page/PageInfo.java +++ b/src/com/engine/salary/util/page/PageInfo.java @@ -10,7 +10,7 @@ import java.util.List; @Data @ToString -public class PageInfo extends com.engine.salary.common.PageInfo { +public class PageInfo extends com.engine.salary.component.PageInfo { Class clazz; public void setColumns(List columns) { From f9163340e5cd7d933a6de1591d1da5a34a6e1fa7 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 28 Feb 2024 09:17:28 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E5=88=86=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/salaryacct/SalaryAcctResultLogMapper.java | 2 +- .../engine/salary/service/SalaryAcctResultLogService.java | 2 +- .../service/impl/SalaryAcctResultLogServiceImpl.java | 8 ++++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultLogMapper.java b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultLogMapper.java index 13229c4f1..c69a4ce49 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultLogMapper.java +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultLogMapper.java @@ -76,6 +76,6 @@ public interface SalaryAcctResultLogMapper { * @param salaryAcctEmployeeIds * @param lockSalaryItemIds */ - void deleteBySalaryAcctEmpIdExceptItemIds(@Param("salaryAcctEmployeeIds") Collection salaryAcctEmployeeIds, + void deleteBySalaryAcctEmpIdExceptItemIds(@Param("salaryAcctEmployeeIds") List salaryAcctEmployeeIds, @Param("exceptItems") Collection lockSalaryItemIds, @Param("updateTime") Date updateTime); } diff --git a/src/com/engine/salary/service/SalaryAcctResultLogService.java b/src/com/engine/salary/service/SalaryAcctResultLogService.java index 8edcf222d..81fb3f350 100644 --- a/src/com/engine/salary/service/SalaryAcctResultLogService.java +++ b/src/com/engine/salary/service/SalaryAcctResultLogService.java @@ -68,5 +68,5 @@ public interface SalaryAcctResultLogService { * @param salaryAcctEmployeeIds * @param lockSalaryItemIds */ - void deleteBySalaryAcctEmpIdExceptItemIds(Collection salaryAcctEmployeeIds, Collection lockSalaryItemIds); + void deleteBySalaryAcctEmpIdExceptItemIds(List salaryAcctEmployeeIds, Collection lockSalaryItemIds); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultLogServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultLogServiceImpl.java index 72a128c1e..378920dbd 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultLogServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultLogServiceImpl.java @@ -60,7 +60,11 @@ public class SalaryAcctResultLogServiceImpl extends Service implements SalaryAcc } @Override - public void deleteBySalaryAcctEmpIdExceptItemIds(Collection salaryAcctEmployeeIds, Collection lockSalaryItemIds) { - getSalaryAcctResultLogMapper().deleteBySalaryAcctEmpIdExceptItemIds(salaryAcctEmployeeIds,lockSalaryItemIds, new Date()); + public void deleteBySalaryAcctEmpIdExceptItemIds(List salaryAcctEmployeeIds, Collection lockSalaryItemIds) { + // 分片 + List> partition = Lists.partition(salaryAcctEmployeeIds, 50); + partition.forEach(part -> { + getSalaryAcctResultLogMapper().deleteBySalaryAcctEmpIdExceptItemIds(part,lockSalaryItemIds, new Date()); + }); } } From 4b77af983a43029dcfa8d87cbb8ccf0b2a30d03b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 28 Feb 2024 13:40:05 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E5=88=86=E9=A1=B5jar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/WEB-INF/lib/pagehelper-5.0.0.jar | Bin 0 -> 64807 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 resource/WEB-INF/lib/pagehelper-5.0.0.jar diff --git a/resource/WEB-INF/lib/pagehelper-5.0.0.jar b/resource/WEB-INF/lib/pagehelper-5.0.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..187266c88e16a5edcc1bfe59dd26ac34198ba202 GIT binary patch literal 64807 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�w!i% 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

I>gysFLDtV8NO!7@O{V-^~ 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 Wg$BHsi@5_ASQ9YwRb09F>;C` Date: Thu, 29 Feb 2024 15:53:22 +0800 Subject: [PATCH 7/8] =?UTF-8?q?fix=E5=AF=BC=E5=85=A5=E6=80=A7=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E5=AF=BC=E5=85=A5=E6=96=B9=E6=B3=95=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E6=94=B9=E5=AE=8C=E5=A4=96=E5=B1=82=E5=BC=95=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/SalaryEmployeeService.java | 24 ++++-- .../impl/AddUpDeductionServiceImpl.java | 2 +- .../impl/AddUpSituationServiceImpl.java | 2 +- .../impl/AttendQuoteDataServiceImpl.java | 2 +- .../impl/OtherDeductionServiceImpl.java | 2 +- .../service/impl/SIAccountServiceImpl.java | 6 +- .../service/impl/SISchemeServiceImpl.java | 2 +- .../impl/SalaryAcctExcelServiceImpl.java | 74 +++++++++---------- .../impl/SalaryEmployeeServiceImpl.java | 4 +- .../impl/SalarySobRangeServiceImpl.java | 2 +- .../impl/SpecialAddDeductionServiceImpl.java | 2 +- .../impl/TaxAgentManageRangeServiceImpl.java | 2 +- 12 files changed, 66 insertions(+), 58 deletions(-) diff --git a/src/com/engine/salary/service/SalaryEmployeeService.java b/src/com/engine/salary/service/SalaryEmployeeService.java index 33898e40a..16afbb396 100644 --- a/src/com/engine/salary/service/SalaryEmployeeService.java +++ b/src/com/engine/salary/service/SalaryEmployeeService.java @@ -30,6 +30,7 @@ public interface SalaryEmployeeService { /** * 获取报表人员字段 + * * @return */ List listAllForReport(); @@ -44,6 +45,7 @@ public interface SalaryEmployeeService { /** * 获取人员信息 + * * @param ids * @return 全量 */ @@ -53,6 +55,7 @@ public interface SalaryEmployeeService { /** * 获取人员信息 + * * @param employeeId * @return 全量 */ @@ -60,6 +63,7 @@ public interface SalaryEmployeeService { /** * 获取人员信息 + * * @param simpleEmployeeIds * @return 简单 */ @@ -74,14 +78,16 @@ public interface SalaryEmployeeService { /** * 筛选导入人员信息可以在人力资源池中匹配到的人员信息 - * @param employeeList 人力资源池 - * @param userName 姓名 + * + * @param confValue 校验方式 + * @param employeeList 人力资源池 + * @param userName 姓名 * @param deparmentName 部门 - * @param mobile 手机号 - * @param workcode 工号 - * @param uid 人员id + * @param mobile 手机号 + * @param workcode 工号 + * @param uid 人员id */ - List matchImportEmployee(List employeeList, String userName, String deparmentName, String mobile, String workcode, Long uid); + List matchImportEmployee(String confValue, List employeeList, String userName, String deparmentName, String mobile, String workcode, Long uid); String empValidType(); @@ -97,29 +103,33 @@ public interface SalaryEmployeeService { /** * 根据离职日期获取离职信息 + * * @param formatDate */ Map getResignationMapByDate(String formatDate); /** * 扩展人员信息 + * * @param ids * @param param * @return */ List expandEmployeeInfo(List ids, EmployeeInfoExpandDTO param); - Map> expandEmployeeMap(List ids, EmployeeInfoExpandDTO param); + Map> expandEmployeeMap(List ids, EmployeeInfoExpandDTO param); /** * 保存扩展信息 + * * @param param */ void saveEmployeeExpandFieldSettings(EmployeeInfoExpandDTO param); /** * 获取扩展信息 + * * @param module * @return */ diff --git a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java index bb0242cf4..3cb43f3f7 100644 --- a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java @@ -264,7 +264,7 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction String workcode = dto.getJobNum(); //筛选导入人员信息可以在人力资源池中匹配到的人员信息 - List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(employees, userName, deparmentName, mobile, workcode, null); + List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue,employees, userName, deparmentName, mobile, workcode, null); if (StringUtils.isBlank(userName) && "0".equals(confValue)) { //姓名 不能为空 diff --git a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java index e4965928c..a209bf946 100644 --- a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java @@ -668,7 +668,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation String workcode = dto.getJobNum(); //筛选导入人员信息可以在人力资源池中匹配到的人员信息 - List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(employees, userName, deparmentName, mobile, workcode, null); + List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue,employees, userName, deparmentName, mobile, workcode, null); //当人员信息导入筛选的全局配置为"0"时,姓名才是必填项 if (StringUtils.isBlank(userName) && "0".equals(confValue)) { diff --git a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java index 8e9f4282a..7d06d693c 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java @@ -669,7 +669,7 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa List employeeSameIds = new ArrayList<>(); //筛选导入人员信息可以在人力资源池中匹配到的人员信息 - List emps = getSalaryEmployeeService(user).matchImportEmployee(employees, userName, deparmentName, mobile, workcode, null); + List emps = getSalaryEmployeeService(user).matchImportEmployee(confValue,employees, userName, deparmentName, mobile, workcode, null); //含在职和离职,选在职数据 if (CollectionUtils.isNotEmpty(emps) && emps.size() > 1) { employeeSameIds = emps.stream() diff --git a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java index dbe2e113b..4d0ace968 100644 --- a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java @@ -246,7 +246,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction List employeeSameIds = new ArrayList<>(); //筛选导入人员信息可以在人力资源池中匹配到的人员信息 - List emps = getSalaryEmployeeService(user).matchImportEmployee(employees, userName, deparmentName, mobile, workcode, null); + List emps = getSalaryEmployeeService(user).matchImportEmployee(confValue,employees, userName, deparmentName, mobile, workcode, null); //含在职和离职,选在职数据 if (CollectionUtils.isNotEmpty(emps) && emps.size() > 1) { employeeSameIds = emps.stream() diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 10ccd0a3d..8f5a3970e 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -1737,7 +1737,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } else { //筛选导入人员信息可以在人力资源池中匹配到的人员信息 - List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(salaryEmployees, dataValue, deparmentName, mobile, workcode, null); + List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue,salaryEmployees, dataValue, deparmentName, mobile, workcode, null); if (CollectionUtils.isEmpty(employeeSameIds)) { isError = true; @@ -2739,7 +2739,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } else { //筛选导入人员信息可以在人力资源池中匹配到的人员信息 - List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(salaryEmployees, dataValue, deparmentName, mobile, workcode, null); + List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue,salaryEmployees, dataValue, deparmentName, mobile, workcode, null); if (CollectionUtils.isEmpty(employeeSameIds)) { isError = true; @@ -3577,7 +3577,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } else { //筛选导入人员信息可以在人力资源池中匹配到的人员信息 - List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(salaryEmployees, name, departmentName, mobile, workcode, null); + List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue,salaryEmployees, name, departmentName, mobile, workcode, null); if (CollectionUtils.isEmpty(employeeSameIds)) { isError = true; diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index 19a670559..00a70a013 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -991,7 +991,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { isError = true; } //筛选导入人员信息可以在人力资源池中匹配到的人员信息 - employees = getSalaryEmployeeService(user).matchImportEmployee(employeeByIds, userName, deparmentName, mobile, workcode, null); + employees = getSalaryEmployeeService(user).matchImportEmployee(confValue,employeeByIds, userName, deparmentName, mobile, workcode, null); } else { employees = employeeByIds.stream().filter(f -> f.getEmployeeId().equals(addEmployeeId)).collect(Collectors.toList()); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 766ebc9f2..b5471f9ad 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -289,10 +289,10 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc //判断是否按照自定义字段导出表头 List finalWeaTableColumns = new ArrayList<>(); - if (queryParam.getSalaryItemIds() != null ) { + if (queryParam.getSalaryItemIds() != null) { //获取人员基本信息字段(汇总) Collection> empFieldList = getSalarySobItemWrapper(user).empFieldList(); - List empFieldIdList= new ArrayList<>(); + List empFieldIdList = new ArrayList<>(); empFieldList.forEach(f -> empFieldIdList.add(f.get("id"))); // 必须选择导出所需的薪资项目 if (CollectionUtils.isEmpty(queryParam.getSalaryItemIds())) { @@ -311,7 +311,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc columnGroupItem.setChildren(childrenColumns); finalWeaTableColumns.add(columnGroupItem); } - } else if (empFieldIdList.contains(tableColumn.getColumn()) || headerRangeList.contains(tableColumn.getColumn())){ + } else if (empFieldIdList.contains(tableColumn.getColumn()) || headerRangeList.contains(tableColumn.getColumn())) { finalWeaTableColumns.add(columnGroupItem); } @@ -334,12 +334,12 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc if (openSum != null && StringUtils.isNotBlank(openSum.getConfValue()) && OpenEnum.parseByValue(openSum.getConfValue()) == OpenEnum.OPEN) { total = true; Map sumRow = getSalaryAcctResultService(user).sumRow(queryParam); - sumRow.forEach((k,v) -> { + sumRow.forEach((k, v) -> { if (NumberUtils.isCreatable(v.toString())) { - sumRow.put(k,new BigDecimal(v.toString())); + sumRow.put(k, new BigDecimal(v.toString())); } }); - if(sumRow !=null){ + if (sumRow != null) { sumRow.put("taxAgentName", "总计"); resultMapList.add(sumRow); } @@ -354,7 +354,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc for (WeaTableColumnGroup weaTableColumn : headerColumnGroup) { String fieldType = (String) map.getOrDefault(weaTableColumn.getColumn().toString() + DATA_TYPE_SUFFIX, StringUtils.EMPTY); if (StringUtils.equals("number", fieldType)) { - row.add(new BigDecimal(StringUtils.isBlank(map.get(weaTableColumn.getColumn()).toString()) ? "0" :map.get(weaTableColumn.getColumn()).toString())); + row.add(new BigDecimal(StringUtils.isBlank(map.get(weaTableColumn.getColumn()).toString()) ? "0" : map.get(weaTableColumn.getColumn()).toString())); } else { row.add(map.getOrDefault(weaTableColumn.getColumn(), StringUtils.EMPTY)); } @@ -380,7 +380,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc SalaryAcctRecordPO byId = getSalaryAcctRecordService(user).getById(salaryAcctRecordPO.getId()); boolean isBackCalc = Objects.equals(byId.getBackCalcStatus(), 1); // 查询薪资账套下的薪资项目+员工信息字段 - SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateWithItemHideBySalarySobId(salaryAcctRecordPO.getSalarySobId(),isBackCalc); + SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateWithItemHideBySalarySobId(salaryAcctRecordPO.getSalarySobId(), isBackCalc); // 构建薪资核算结果列表表头 List columnList = SalaryAcctResultBO.buildTableColumns(salarySobItemAggregateDTO, ListUtils.emptyIfNull(salaryAcctRecordPO.getLockSalaryItemIds())); // 获取固定列头数 @@ -450,27 +450,27 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc SalaryAcctResultBO.sortItem(salarySobItemPOMap); // 根据账套分组封装薪资项目的值 List itemsByGroup = new ArrayList<>(); - for(SalarySobItemGroupPO groupPO : salarySobItemGroupPOS){ - List groupItems = salarySobItemPOMap.getOrDefault(groupPO.getId(),Collections.emptyList()); + for (SalarySobItemGroupPO groupPO : salarySobItemGroupPOS) { + List groupItems = salarySobItemPOMap.getOrDefault(groupPO.getId(), Collections.emptyList()); List items = groupItems.stream() .map(salarySobItemPO -> SalaryAcctImportFieldDTO.ImportFieldDTO.builder() - .salaryItemId(salarySobItemPO.getSalaryItemId()) - .salaryItemName(Optional.ofNullable(salaryItemMap.get(salarySobItemPO.getSalaryItemId())).map(SalaryItemPO::getName).orElse(StringUtils.EMPTY)) - .dataType(Optional.ofNullable(salaryItemMap.get(salarySobItemPO.getSalaryItemId())).map(SalaryItemPO::getDataType).orElse(SalaryDataTypeEnum.NUMBER.getValue())) - .build()) + .salaryItemId(salarySobItemPO.getSalaryItemId()) + .salaryItemName(Optional.ofNullable(salaryItemMap.get(salarySobItemPO.getSalaryItemId())).map(SalaryItemPO::getName).orElse(StringUtils.EMPTY)) + .dataType(Optional.ofNullable(salaryItemMap.get(salarySobItemPO.getSalaryItemId())).map(SalaryItemPO::getDataType).orElse(SalaryDataTypeEnum.NUMBER.getValue())) + .build()) .collect(Collectors.toList()); itemsByGroup.add(SalaryAcctImportFieldDTO.ImportFieldByGroupDTO.builder() .salarySobItemGroupId(groupPO.getId()) .salarySobItemGroupName(groupPO.getName()) .salaryItems(items) - .sortedIndex(groupPO.getSortedIndex()).build() ); + .sortedIndex(groupPO.getSortedIndex()).build()); } // 未分类 List noGroupItems = salarySobItemPOMap.getOrDefault(0L, Collections.emptyList()); - if(CollectionUtils.isNotEmpty(noGroupItems)){ + if (CollectionUtils.isNotEmpty(noGroupItems)) { List items = noGroupItems.stream() - .map(salarySobItemPO ->SalaryAcctImportFieldDTO.ImportFieldDTO.builder() + .map(salarySobItemPO -> SalaryAcctImportFieldDTO.ImportFieldDTO.builder() .salaryItemId(salarySobItemPO.getSalaryItemId()) .salaryItemName(Optional.ofNullable(salaryItemMap.get(salarySobItemPO.getSalaryItemId())).map(SalaryItemPO::getName).orElse(StringUtils.EMPTY)) .dataType(Optional.ofNullable(salaryItemMap.get(salarySobItemPO.getSalaryItemId())).map(SalaryItemPO::getDataType).orElse(SalaryDataTypeEnum.NUMBER.getValue())) @@ -510,7 +510,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // .collect(Collectors.toList()); // 缓存勾选 String cacheKey = user.getUID() + SalaryItemConstant.RESULT_IMPORT_FIELD_SIGN; - String cacheValue = (String)Util_DataCache.getObjVal(cacheKey); + String cacheValue = (String) Util_DataCache.getObjVal(cacheKey); List checkItems = JsonUtil.parseList(cacheValue, Long.class) == null ? new ArrayList<>() : JsonUtil.parseList(cacheValue, Long.class); // 转换成dto // return SalaryAcctImportFieldDTO.builder().formulaItems(formulaItems).sqlItems(sqlItems).inputItems(inputItems).checkItems(checkItems).build(); @@ -541,8 +541,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc SalaryAcctResultBO.sortItem(salarySobItemPOMap); // 根据账套分组封装薪资项目的值 List itemsByGroup = new ArrayList<>(); - for(SalarySobItemGroupPO groupPO : salarySobItemGroupPOS){ - List groupItems = salarySobItemPOMap.getOrDefault(groupPO.getId(),Collections.emptyList()); + for (SalarySobItemGroupPO groupPO : salarySobItemGroupPOS) { + List groupItems = salarySobItemPOMap.getOrDefault(groupPO.getId(), Collections.emptyList()); List items = groupItems.stream() .map(salarySobItemPO -> SalaryAcctImportFieldDTO.ImportFieldDTO.builder() .salaryItemId(salarySobItemPO.getSalaryItemId()) @@ -554,13 +554,13 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc .salarySobItemGroupId(groupPO.getId()) .salarySobItemGroupName(groupPO.getName()) .salaryItems(items) - .sortedIndex(groupPO.getSortedIndex()).build() ); + .sortedIndex(groupPO.getSortedIndex()).build()); } // 未分类 List noGroupItems = salarySobItemPOMap.getOrDefault(0L, Collections.emptyList()); - if(CollectionUtils.isNotEmpty(noGroupItems)){ + if (CollectionUtils.isNotEmpty(noGroupItems)) { List items = noGroupItems.stream() - .map(salarySobItemPO ->SalaryAcctImportFieldDTO.ImportFieldDTO.builder() + .map(salarySobItemPO -> SalaryAcctImportFieldDTO.ImportFieldDTO.builder() .salaryItemId(salarySobItemPO.getSalaryItemId()) .salaryItemName(Optional.ofNullable(salaryItemMap.get(salarySobItemPO.getSalaryItemId())).map(SalaryItemPO::getName).orElse(StringUtils.EMPTY)) .build()) @@ -574,7 +574,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc } // 缓存勾选 String cacheKey = user.getUID() + SalaryItemConstant.RESULT_EXPORT_FIELD_SIGN; - String cacheValue = (String)Util_DataCache.getObjVal(cacheKey); + String cacheValue = (String) Util_DataCache.getObjVal(cacheKey); List checkItems = JsonUtil.parseList(cacheValue, Long.class) == null ? new ArrayList<>() : JsonUtil.parseList(cacheValue, Long.class); // 转换成dto // return SalaryAcctImportFieldDTO.builder().formulaItems(formulaItems).sqlItems(sqlItems).inputItems(inputItems).checkItems(checkItems).build(); @@ -586,7 +586,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // ValidUtil.doValidator(param); // 从缓存中获取所选的薪资项目 String cacheKey = user.getUID() + SalaryItemConstant.RESULT_IMPORT_FIELD_SIGN; - String cacheValue = (String)Util_DataCache.getObjVal(cacheKey); + String cacheValue = (String) Util_DataCache.getObjVal(cacheKey); List checkItems = JsonUtil.parseList(cacheValue, Long.class) == null ? new ArrayList<>() : JsonUtil.parseList(cacheValue, Long.class); // 必须选择导入模板所需的薪资项目 if (CollectionUtils.isEmpty(checkItems)) { @@ -691,7 +691,6 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc } - @Override public XSSFWorkbook exportComparisonResult(SalaryComparisonResultQueryParam queryParam) { ValidUtil.doValidator(queryParam); @@ -827,7 +826,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // 查询薪资核算所用的薪资账套的员工信息字段 List salarySobEmpFieldPOS = getSalarySobEmpFieldService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); List salarySobEmpFieldDTOS = new SalarySobItemAggregateBO().buildEmpField(salarySobEmpFieldPOS); - salarySobEmpFieldDTOS.stream().forEach(empField -> finalWeaTableColumns.add(new WeaTableColumnGroup("150", SalaryI18nUtil.getI18nLabel(0, empField.getFieldName()), SalaryI18nUtil.getI18nLabel(0, empField.getFieldName())))); + salarySobEmpFieldDTOS.stream().forEach(empField -> finalWeaTableColumns.add(new WeaTableColumnGroup("150", SalaryI18nUtil.getI18nLabel(0, empField.getFieldName()), SalaryI18nUtil.getI18nLabel(0, empField.getFieldName())))); for (WeaTableColumnGroup tableColumn : weaTableColumns) { WeaTableColumnGroup columnGroupItem = (WeaTableColumnGroup) tableColumn; if (columnGroupItem.getChildren() != null) { @@ -992,16 +991,16 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // List headers = ExcelSupport.getSheetHeader(sheet, 0); List headers; // if (StringUtils.equals("importSalaryAcctResult", importType)) { - headers = ExcelSupport.getSheetHeader(sheet, 1); + headers = ExcelSupport.getSheetHeader(sheet, 1); // } else { // headers = ExcelSupport.getSheetHeader(sheet, 0); // } - // 处理数值 + // 处理数值 // List> data = ExcelParseHelper.parse2Map(sheet, 1); List> data; // if (StringUtils.equals("importSalaryAcctResult", importType)) { - data = ExcelParseHelper.parse2Map(sheet, 2, 1); + data = ExcelParseHelper.parse2Map(sheet, 2, 1); // } else { // data = ExcelParseHelper.parse2Map(sheet, 1); // } @@ -1045,7 +1044,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc //salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102838, "姓名不能为空"), i, i, j, j); } else { //筛选导入人员信息可以在人力资源池中匹配到的人员信息 - List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(salaryEmployees, dataValue, deparmentName, mobile, workcode, null); + List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue, salaryEmployees, dataValue, deparmentName, mobile, workcode, null); if (CollectionUtils.isEmpty(employeeSameIds)) { isError = true; @@ -1248,7 +1247,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc getSalaryComparisonResultService(user).deleteBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecordId)); if (CollectionUtils.isNotEmpty(excelAcctResults)) { excelAcctResults.stream().forEach(result -> { - if(StringUtils.isEmpty(result.getResultValue())){ + if (StringUtils.isEmpty(result.getResultValue())) { result.setResultValue(" "); } }); @@ -1282,7 +1281,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc } } SalarySysConfPO autoLock = getSalarySysConfService(user).getOneByCode(SalarySysConstant.EDIT_IMPORT_AUTO_LOCK); - if(autoLock != null && StringUtils.equals(autoLock.getConfValue(),"1")){ + if (autoLock != null && StringUtils.equals(autoLock.getConfValue(), "1")) { // 导入的列都自动锁定 SalaryAcctResultUpdateLockStatusParam updateLockStatusParam = SalaryAcctResultUpdateLockStatusParam.builder() .salaryItemIds(excelSalaryItemIds) @@ -1305,7 +1304,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc } /** - * 存储薪资核算结果数据来源日志 + * 存储薪资核算结果数据来源日志 + * * @param salaryAcctResults */ private void handleSalaryAcctResultLog(List salaryAcctResults) { @@ -1315,14 +1315,14 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc List salaryAcctResultList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, salaryItemIds); Long uid = Long.valueOf(user.getUID()); List needInsertList = SalaryAcctResultLogBO.buildSalaryAcctResultLog(salaryAcctResultList, uid, SalaryAcctResultDataSourceEnum.IMPORT); - if(CollectionUtils.isNotEmpty(needInsertList)){ + if (CollectionUtils.isNotEmpty(needInsertList)) { getSalaryAcctResultLogService(user).batchInsert(needInsertList); } } /** - * @description * @return void + * @description * @author Harryxzy * @date 2022/12/26 22:36 */ @@ -1330,7 +1330,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc Map> deleteMap = SalaryEntityUtil.group2Map(deleteResults, po -> po.getSalaryAcctEmpId() + "-" + po.getSalaryItemId()); salaryAcctResults.stream().forEach(result -> { List salaryAcctResultPOS = deleteMap.get(result.getSalaryAcctEmpId() + "-" + result.getSalaryItemId()); - if(salaryAcctResultPOS != null && salaryAcctResultPOS.size() > 0 ){ + if (salaryAcctResultPOS != null && salaryAcctResultPOS.size() > 0) { result.setOriginResultValue(salaryAcctResultPOS.get(0).getOriginResultValue()); } }); diff --git a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java index 3e4528309..d6dcfd5b2 100644 --- a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java @@ -209,15 +209,13 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee } @Override - public List matchImportEmployee(List employeeList, String userName, String deparmentName, String mobile, String workcode, Long uid) { + public List matchImportEmployee(String confValue, List employeeList, String userName, String deparmentName, String mobile, String workcode, Long uid) { if (uid != null) { return employeeList.stream() .filter(e -> Objects.equals(e.getEmployeeId(), uid)) .collect(Collectors.toList()); } - //查询对于人员信息导入筛选的全局配置 - String confValue = empValidType(); List employees = new ArrayList<>(); //“0”代表姓名+部门+手机号的匹配原则,“1”代表工号为唯一匹配原则 if ("0".equals(confValue)) { diff --git a/src/com/engine/salary/service/impl/SalarySobRangeServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobRangeServiceImpl.java index 257ab6d72..c21551c9f 100644 --- a/src/com/engine/salary/service/impl/SalarySobRangeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobRangeServiceImpl.java @@ -326,7 +326,7 @@ public class SalarySobRangeServiceImpl extends Service implements SalarySobRange //筛选导入人员信息可以在人力资源池中匹配到的人员信息 List emps = getSalaryEmployeeService(user) - .matchImportEmployee(employees, userName, deparmentName, mobile, workcode, null); + .matchImportEmployee(confValue,employees, userName, deparmentName, mobile, workcode, null); //含在职和离职,选在职数据 if (CollectionUtils.isNotEmpty(emps) && emps.size() > 1) { employeeSameIds = emps.stream() diff --git a/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java b/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java index 3ac80b609..3309c7090 100644 --- a/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java @@ -239,7 +239,7 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd //筛选导入人员信息可以在人力资源池中匹配到的人员信息 List emps = getSalaryEmployeeService(user) - .matchImportEmployee(employees, userName, deparmentName, mobile, workcode, null); + .matchImportEmployee(confValue,employees, userName, deparmentName, mobile, workcode, null); //含在职和离职,选在职数据 if (CollectionUtils.isNotEmpty(emps) && emps.size() > 1) { employeeSameIds = emps.stream() diff --git a/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java index caf96a0f9..50c790547 100644 --- a/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java @@ -769,7 +769,7 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM //筛选导入人员信息可以在人力资源池中匹配到的人员信息 List emps = getSalaryEmployeeService() - .matchImportEmployee(employees, userName, deparmentName, mobile, workcode, null); + .matchImportEmployee(confValue,employees, userName, deparmentName, mobile, workcode, null); if (CollectionUtils.isNotEmpty(emps)) { employeeSameIds = emps.stream() .map(DataCollectionEmployee::getEmployeeId) From 34f6b76fb13f7a4e7b1b5a0316c4220abc78e4e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 1 Mar 2024 16:55:40 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E4=B8=BAnull?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SalaryStatisticsReportServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 261e6292b..17d64e2da 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -398,7 +398,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary Map> salaryAcctEmpResultMap = SalaryEntityUtil.group2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId); Map> map = new HashMap<>(); salaryAcctEmpResultMap.forEach((k, v) -> { - Map collect = v.stream().collect(Collectors.toMap(p -> Util.null2String(p.getSalaryItemId()), SalaryAcctResultPO::getResultValue, (key1, key2) -> key2)); + Map collect = v.stream().collect(Collectors.toMap(p -> Util.null2String(p.getSalaryItemId()), p -> Util.null2String(p.getResultValue()), (key1, key2) -> key2)); map.put(k, collect); }); @@ -1937,7 +1937,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary Map sameEmpIdYearMap = new HashMap<>(); String dimensionValue = data.getDimensionValue(); - dimensionSet.stream().sorted((a,b)->b.length()-a.length()).forEach(k -> { + dimensionSet.stream().sorted((a, b) -> b.length() - a.length()).forEach(k -> { if (dimensionValue == null) { List salaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, dimension.getDimCode(), data.getList(), empIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList()); List lastSalaryAcctEmployees = SalaryStatisticsReportBO.listAcctEmpByRationGroupIndividual(k, dimension.getDimCode(), data.getLastList(), lastEmpIdYearMap, salaryAcctResultValueMap, data.getSalaryStatisticsItemList());