From 671350654a861e9c8473b42f5df7baaf901132bc Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 22 Jul 2024 15:29:34 +0800 Subject: [PATCH 001/124] =?UTF-8?q?fix=E8=96=AA=E8=B5=84=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E6=98=BE=E7=A4=BA=E5=88=97=E5=AE=9A=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsEmployeeServiceImpl.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java index ecde4e139..3a6e00071 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java @@ -367,8 +367,23 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala List salaryAcctResultValues = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); // 3.获取薪资项目 - List salaryItemIds = salaryAcctResultValues.stream().map(SalaryAcctResultPO::getSalaryItemId).distinct().collect(Collectors.toList()); - List salaryItemList = CollectionUtils.isEmpty(salaryItemIds) ? Lists.newArrayList() : getSalaryItemService(user).listByIds(salaryItemIds); + List salaryItemList = getSalaryItemService(user).listAll(); + salaryItemList = salaryItemList.stream() + .sorted(new Comparator() { + @Override + public int compare(SalaryItemPO o1, SalaryItemPO o2) { + if (o1.getSortedIndex() == null && o2.getSortedIndex() == null) { + Integer systemType1 = o1.getSystemType() == null ? 0 : o1.getSystemType(); + Integer systemType2 = o2.getSystemType() == null ? 0 : o2.getSystemType(); + return systemType1.compareTo(systemType2); + } else { + Integer sortedIndex1 = o1.getSortedIndex() == null ? 0 : o1.getSortedIndex(); + Integer sortedIndex2 = o2.getSortedIndex() == null ? 0 : o2.getSortedIndex(); + return sortedIndex2.compareTo(sortedIndex1); + } + } + }) + .collect(Collectors.toList()); return SalaryStatisticsEmployeeDetailResultDTO.builder() .salaryAcctEmployeeList(salaryAcctEmployeeList) From bdd27bcfc6c3b701ce65f8449f9b9c2525fa7c09 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 25 Jul 2024 14:04:14 +0800 Subject: [PATCH 002/124] =?UTF-8?q?=E6=A0=B8=E7=AE=97=E6=97=B6=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E4=BA=BA=E5=91=98=E7=BB=84=E7=BB=87=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/EmployBiz.java | 38 ++++++++++ .../engine/salary/entity/hrm/JobCallInfo.java | 32 ++++++++ .../salaryacct/bo/SalaryAcctResultBO.java | 42 +++++++++- .../dto/SalaryAcctEmployeeInfoDTO.java | 11 ++- .../param/SalaryAcctResultSaveParam.java | 4 + .../dto/SalaryFormulaEmployeeDTO.java | 14 ++-- .../mapper/datacollection/EmployMapper.java | 17 +++++ .../mapper/datacollection/EmployMapper.xml | 21 +++++ .../salaryacct/SalaryAcctEmployeeMapper.java | 2 + .../salaryacct/SalaryAcctEmployeeMapper.xml | 76 +++++++++++++++++++ .../service/SalaryAcctEmployeeService.java | 5 ++ .../salary/service/SalaryEmployeeService.java | 14 ++++ .../impl/SalaryAcctEmployeeServiceImpl.java | 4 + .../impl/SalaryAcctResultServiceImpl.java | 44 +++++++++++ .../impl/SalaryEmployeeServiceImpl.java | 27 +++++++ 15 files changed, 339 insertions(+), 12 deletions(-) create mode 100644 src/com/engine/salary/entity/hrm/JobCallInfo.java diff --git a/src/com/engine/salary/biz/EmployBiz.java b/src/com/engine/salary/biz/EmployBiz.java index 8f731c242..6de561546 100644 --- a/src/com/engine/salary/biz/EmployBiz.java +++ b/src/com/engine/salary/biz/EmployBiz.java @@ -118,6 +118,19 @@ public class EmployBiz extends BaseBean { } } + public PositionInfo getPositionInfoById(Long positionId) { + if (positionId == null) { + return null; + } + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + EmployMapper mapper = sqlSession.getMapper(EmployMapper.class); + return mapper.getPositionInfoById(positionId); + } finally { + sqlSession.close(); + } + } + public List listByParams(List includeQueryParams) { SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); try { @@ -187,6 +200,20 @@ public class EmployBiz extends BaseBean { } } + public SubCompanyInfo getSubCompanyInfoById(Long subCompanyId) { + if (subCompanyId == null) { + return null; + } + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + EmployMapper mapper = sqlSession.getMapper(EmployMapper.class); + return mapper.getSubCompanyInfoById(subCompanyId); + } finally { + sqlSession.close(); + } + } + + public List listAllForReport() { SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); try { @@ -206,4 +233,15 @@ public class EmployBiz extends BaseBean { sqlSession.close(); } } + + public DeptInfo getDeptInfoById(Long departmentId) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + EmployMapper mapper = sqlSession.getMapper(EmployMapper.class); + return mapper.getDeptInfoById(departmentId); + } finally { + sqlSession.close(); + } + } + } diff --git a/src/com/engine/salary/entity/hrm/JobCallInfo.java b/src/com/engine/salary/entity/hrm/JobCallInfo.java new file mode 100644 index 000000000..246ba1423 --- /dev/null +++ b/src/com/engine/salary/entity/hrm/JobCallInfo.java @@ -0,0 +1,32 @@ +package com.engine.salary.entity.hrm; + +import com.engine.salary.annotation.I18n; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 职称基本信息 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class JobCallInfo { + + private Long id; + + /** + * 名称 + */ + @I18n + private String name; + + +} diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index f3a419a20..d5b619a81 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -479,12 +479,45 @@ public class SalaryAcctResultBO { // 个税扣缴义务人 employeeFieldValueMap.put("taxAgentName", Optional.ofNullable(taxAgentPO).map(TaxAgentPO::getName).orElse(StringUtils.EMPTY)); Map employeeFieldNameMap = buildEmployeeFieldName(); + List canEditKeys = Arrays.asList("subcompany", "department", "jobtitle", "jobcall"); List employeeInfos = salarySobEmpFields.stream() - .map(e -> SalaryAcctEmployeeInfoDTO.builder() - .fieldName(employeeFieldNameMap.getOrDefault(e.getFieldCode(), StringUtils.EMPTY)) - .fieldValue(employeeFieldValueMap.getOrDefault(e.getFieldCode(), StringUtils.EMPTY)) - .build()) + .map(e -> { + String fieldCode = e.getFieldCode(); + String fieldType = employeeFieldNameMap.getOrDefault(fieldCode + "_type", StringUtils.EMPTY); + SalaryAcctEmployeeInfoDTO dto = SalaryAcctEmployeeInfoDTO.builder() + .fieldCode(fieldCode) + .fieldName(employeeFieldNameMap.getOrDefault(fieldCode, StringUtils.EMPTY)) + .fieldValue(employeeFieldValueMap.getOrDefault(fieldCode, StringUtils.EMPTY)) + .fieldType(fieldType) + .canEdit(fieldType.contains("Browser") ? true : false) + .build(); + + String codeKey = fieldCode.replace("Id", "").replace("Name", ""); + if (canEditKeys.contains(codeKey)) { + // 前端用于回写浏览框 + Map fieldValueMap = new HashMap<>(); + fieldValueMap.put("id", employeeFieldValueMap.getOrDefault(codeKey + "Id", StringUtils.EMPTY)); + fieldValueMap.put("name", employeeFieldValueMap.getOrDefault(codeKey + "Name", StringUtils.EMPTY)); + dto.setFieldValue(fieldValueMap); + } + return dto; + }) .collect(Collectors.toList()); + + List needRemoveFieldNames = new ArrayList(); + // 过滤出是浏览框类型的且人员信息中同时存在名称和id的字段 + employeeInfos.stream() + .filter(e -> e.getFieldType().contains("Browser")) + .map(e -> SalaryAcctEmployeeInfoDTO.builder().fieldName(e.getFieldName().replace("ID","")).build()) + .collect(Collectors.groupingBy(SalaryAcctEmployeeInfoDTO::getFieldName)) + .forEach((k,v) -> { + if (v.size() > 1) { + needRemoveFieldNames.add(k+"ID"); + } + }); + + // 移除字段 + employeeInfos = employeeInfos.stream().filter(info -> !needRemoveFieldNames.contains(info.getFieldName())).collect(Collectors.toList()); // 薪资项目的值 Map resultValueMap = SalaryEntityUtil.convert2Map(salaryAcctResults, SalaryAcctResultPO::getSalaryItemId, SalaryAcctResultPO::getResultValue); Map salaryItemMap = SalaryEntityUtil.convert2Map(salaryItems, SalaryItemPO::getId); @@ -709,6 +742,7 @@ public class SalaryAcctResultBO { } SalaryFormulaVar annotation = declaredField.getAnnotation(SalaryFormulaVar.class); employeeFieldNameMap.put(declaredField.getName(), SalaryI18nUtil.getI18nLabel(annotation.labelId(), annotation.defaultLabel())); + employeeFieldNameMap.put(declaredField.getName() + "_type", annotation.dataType()); } return employeeFieldNameMap; } diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctEmployeeInfoDTO.java b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctEmployeeInfoDTO.java index 12e2e694d..6ee7bdcf6 100644 --- a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctEmployeeInfoDTO.java +++ b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctEmployeeInfoDTO.java @@ -23,5 +23,14 @@ public class SalaryAcctEmployeeInfoDTO { private String fieldName; //字段值 - private String fieldValue; + private Object fieldValue; + + // code + private String fieldCode; + + // 用于编辑时前端渲染对应输入选择框 + private String fieldType; + + // 是否可编辑 + private boolean canEdit; } diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultSaveParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultSaveParam.java index 9692d6b12..61568093c 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultSaveParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultSaveParam.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.salaryacct.param; +import com.engine.salary.entity.salaryacct.dto.SalaryAcctEmployeeInfoDTO; import com.engine.salary.util.valid.DataCheck; import lombok.AllArgsConstructor; import lombok.Builder; @@ -30,6 +31,9 @@ public class SalaryAcctResultSaveParam { @DataCheck(require = true,message = "薪资项目的值的集合不能为空") private Collection items; + // 员工基础信息 + private Collection employeeInfos; + @Data @Builder @NoArgsConstructor diff --git a/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java b/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java index 413d9de61..4c5856fb1 100644 --- a/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java +++ b/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java @@ -31,22 +31,22 @@ public class SalaryFormulaEmployeeDTO { private String username; //部门 - @SalaryFormulaVar(defaultLabel = "部门", labelId = 86185, dataType = "string") + @SalaryFormulaVar(defaultLabel = "部门", labelId = 86185, dataType = "departmentBrowser") private String departmentName; - @SalaryFormulaVar(defaultLabel = "部门ID", labelId = 86185, dataType = "string") + @SalaryFormulaVar(defaultLabel = "部门ID", labelId = 86185, dataType = "departmentBrowser") private Long departmentId; //分部 - @SalaryFormulaVar(defaultLabel = "分部", labelId = 82465, dataType = "string") + @SalaryFormulaVar(defaultLabel = "分部", labelId = 82465, dataType = "subcompanyBrowser") private String subcompanyName; //岗位 - @SalaryFormulaVar(defaultLabel = "岗位", labelId = 90633, dataType = "string") + @SalaryFormulaVar(defaultLabel = "岗位", labelId = 90633, dataType = "jobtitleBrowser") private String jobtitleName; - @SalaryFormulaVar(defaultLabel = "岗位ID", labelId = 90633, dataType = "string") + @SalaryFormulaVar(defaultLabel = "岗位ID", labelId = 90633, dataType = "jobtitleBrowser") private Long jobtitleId; @SalaryFormulaVar(defaultLabel = "入职日期", labelId = 86319, dataType = "string") @@ -88,9 +88,9 @@ public class SalaryFormulaEmployeeDTO { //职称 - @SalaryFormulaVar(defaultLabel = "职称", labelId = 98623, dataType = "string") + @SalaryFormulaVar(defaultLabel = "职称", labelId = 98623, dataType = "jobcallBrowser") private String jobcall; - @SalaryFormulaVar(defaultLabel = "职称ID", labelId = 98623, dataType = "string") + @SalaryFormulaVar(defaultLabel = "职称ID", labelId = 98623, dataType = "jobcallBrowser") private Long jobcallId; diff --git a/src/com/engine/salary/mapper/datacollection/EmployMapper.java b/src/com/engine/salary/mapper/datacollection/EmployMapper.java index 238e8d74f..d95d6c45e 100644 --- a/src/com/engine/salary/mapper/datacollection/EmployMapper.java +++ b/src/com/engine/salary/mapper/datacollection/EmployMapper.java @@ -2,6 +2,7 @@ package com.engine.salary.mapper.datacollection; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.hrm.DeptInfo; +import com.engine.salary.entity.hrm.JobCallInfo; import com.engine.salary.entity.hrm.PositionInfo; import com.engine.salary.entity.hrm.SubCompanyInfo; import com.engine.salary.entity.hrm.dto.HrmInfoDTO; @@ -81,6 +82,13 @@ public interface EmployMapper { */ List listPositionInfo(@Param("collection") List ids); + /** + * 所以岗位id 获取岗位信息 + * @param id + * @return + */ + PositionInfo getPositionInfoById(@Param("positionId") Long id); + /** * 所以部门 * @param departmentIds @@ -104,6 +112,13 @@ public interface EmployMapper { */ List getSubCompanyInfoList(@Param("subDepartmentIds") List subDepartmentIds); + /** + * 根据分部id获取分部信息 + * @param subDepartmentId + * @return + */ + SubCompanyInfo getSubCompanyInfoById(@Param("subDepartmentId")Long subDepartmentId); + /** * 虚拟分部 * @param virtualSubCompanyIds @@ -158,4 +173,6 @@ public interface EmployMapper { * @return */ List listBySubCompanyOrDepartment(@Param("subCompanyIds") List subCompanyIds, @Param("departmentIds") List departmentIds); + + JobCallInfo getJobCallInfoById(@Param("jobCallId") Long jobCallId); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml index ad6b6b38c..e19952e21 100644 --- a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml +++ b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml @@ -107,6 +107,13 @@ + + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.java b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.java index 3b97e3084..84b16591c 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.java +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.java @@ -122,4 +122,6 @@ public interface SalaryAcctEmployeeMapper { void lockByAcctEmpIds(@Param("lockStatus") Integer lockStatus, @Param("acctEmpIds") Set acctEmpIds); void lockByRecordId(@Param("lockStatus") Integer lockStatus, @Param("recordId") Long recordId); + + void updateIgnoreNull(@Param("salaryAcctEmployeePO")SalaryAcctEmployeePO salaryAcctEmployeePO); } diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml index 935089f71..cc4a386da 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml @@ -1366,4 +1366,80 @@ AND salary_acct_record_id = #{recordId} + + UPDATE hrsa_salary_acct_emp + + + salary_acct_record_id=#{salaryAcctRecordId}, + + + salary_sob_id=#{salarySobId}, + + + employee_id=#{employeeId}, + + + tax_agent_id=#{taxAgentId}, + + + salary_month=#{salaryMonth}, + + + creator=#{creator}, + + + create_time=#{createTime}, + + + update_time=#{updateTime}, + + + delete_type=#{deleteType}, + + + tenant_key=#{tenantKey}, + + + employee_type=#{employeeType}, + + + income_category=#{incomeCategory}, + + + lock_status=#{lockStatus}, + + + subcompany_name=#{subcompanyName}, + + + subcompany_id=#{subcompanyId}, + + + department_name=#{departmentName}, + + + department_id=#{departmentId}, + + + jobtitle_name=#{jobtitleName}, + + + jobtitle_id=#{jobtitleId}, + + + jobcall=#{jobcall}, + + + jobcall_id=#{jobcallId}, + + + status=#{status}, + + + lock_time=#{lockTime}, + + + WHERE id = #{id} AND delete_type = 0 + + diff --git a/src/com/engine/salary/service/SalaryAcctEmployeeService.java b/src/com/engine/salary/service/SalaryAcctEmployeeService.java index a4d905a62..6c506cb04 100644 --- a/src/com/engine/salary/service/SalaryAcctEmployeeService.java +++ b/src/com/engine/salary/service/SalaryAcctEmployeeService.java @@ -262,4 +262,9 @@ public interface SalaryAcctEmployeeService { */ void lockEmp(SalaryAcctResultUpdateLockStatusParam updateParam); + /** + * 更新 + * @param salaryAcctEmployeePO + */ + void updateIgnoreNull(SalaryAcctEmployeePO salaryAcctEmployeePO); } diff --git a/src/com/engine/salary/service/SalaryEmployeeService.java b/src/com/engine/salary/service/SalaryEmployeeService.java index cd6be6db8..f3b19a040 100644 --- a/src/com/engine/salary/service/SalaryEmployeeService.java +++ b/src/com/engine/salary/service/SalaryEmployeeService.java @@ -2,6 +2,7 @@ package com.engine.salary.service; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.hrm.DeptInfo; +import com.engine.salary.entity.hrm.JobCallInfo; import com.engine.salary.entity.hrm.PositionInfo; import com.engine.salary.entity.hrm.SubCompanyInfo; import com.engine.salary.entity.hrm.dto.EmployeeInfoExpandDTO; @@ -102,14 +103,20 @@ public interface SalaryEmployeeService { List getDeptInfoList(List departmentIds); + DeptInfo getDeptInfoById(Long departmentId); + List getVirtualDeptInfoList(List virtualDepartmentIds); List getSubCompanyInfoList(List subDepartmentIds); + SubCompanyInfo getSubCompanyInfoById(Long subDepartmentId); + List getVirtualSubCompanyInfoList(List virtualSubDepartmentIds); List listPositionInfo(List positionIds); + PositionInfo getPositionInfoById(Long positionId); + List listEmployee(); List listByParams(List includeQueryParams); @@ -167,4 +174,11 @@ public interface SalaryEmployeeService { * @return */ List listBySubCompanyOrDepartment(List subCompanyIds, List departmentIds); + + /** + * 根据职称id获取职称信息 + * @param jobCallId + * @return + */ + JobCallInfo getJobCallInfoById(Long jobCallId); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index 84bb51777..d7a4f7646 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -785,4 +785,8 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct } } + @Override + public void updateIgnoreNull(SalaryAcctEmployeePO salaryAcctEmployeePO) { + getSalaryAcctEmployeeMapper().updateIgnoreNull(salaryAcctEmployeePO); + } } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 1c59cceb4..36f19b6f6 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -11,6 +11,10 @@ import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.datacollection.dto.AttendQuoteFieldListDTO; +import com.engine.salary.entity.hrm.DeptInfo; +import com.engine.salary.entity.hrm.JobCallInfo; +import com.engine.salary.entity.hrm.PositionInfo; +import com.engine.salary.entity.hrm.SubCompanyInfo; import com.engine.salary.entity.progress.ProgressDTO; import com.engine.salary.entity.report.bo.SalaryAcctResultReportBO; import com.engine.salary.entity.report.po.SalaryAcctResultReportPO; @@ -591,6 +595,46 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe if (Objects.isNull(salaryAcctEmployeePO)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98831, "薪资核算人员不存在或已被删除")); } + // 更新员工基本信息值 + saveParam.getEmployeeInfos().stream().forEach(info -> { + if (info.getFieldValue() != null && StringUtils.isNotBlank(info.getFieldValue().toString())) { + if (info.getFieldCode().equals("departmentName") || info.getFieldCode().equals("departmentId")) { + // 修改部门信息 + DeptInfo deptInfo = getSalaryEmployeeService(user).getDeptInfoById(NumberUtils.isCreatable(info.getFieldValue().toString()) + ? Long.valueOf(info.getFieldValue().toString()) : 0L); + if (Objects.nonNull(deptInfo)) { + salaryAcctEmployeePO.setDepartmentName(deptInfo.getName()); + salaryAcctEmployeePO.setDepartmentId(deptInfo.getId()); + } + } else if (info.getFieldCode().equals("subcompanyName") || info.getFieldCode().equals("subcompanyId")) { + // 修改分部信息 + SubCompanyInfo subCompanyInfo = getSalaryEmployeeService(user).getSubCompanyInfoById(NumberUtils.isCreatable(info.getFieldValue().toString()) + ? Long.valueOf(info.getFieldValue().toString()) : 0L); + if (Objects.nonNull(subCompanyInfo)) { + salaryAcctEmployeePO.setSubcompanyName(subCompanyInfo.getName()); + salaryAcctEmployeePO.setSubcompanyId(subCompanyInfo.getId()); + } + } else if (info.getFieldCode().equals("jobtitleName") || info.getFieldCode().equals("jobtitleId")) { + // 修改岗位信息 + PositionInfo positionInfo = getSalaryEmployeeService(user).getPositionInfoById(NumberUtils.isCreatable(info.getFieldValue().toString()) + ? Long.valueOf(info.getFieldValue().toString()) : 0L); + if (Objects.nonNull(positionInfo)) { + salaryAcctEmployeePO.setJobtitleName(positionInfo.getName()); + salaryAcctEmployeePO.setJobtitleId(positionInfo.getId()); + } + } else if (info.getFieldCode().equals("jobcall") || info.getFieldCode().equals("jobcallId")) { + // 修改职称信息 + JobCallInfo jobCallInfo = getSalaryEmployeeService(user).getJobCallInfoById(NumberUtils.isCreatable(info.getFieldValue().toString()) + ? Long.valueOf(info.getFieldValue().toString()) : 0L); + if (Objects.nonNull(jobCallInfo)) { + salaryAcctEmployeePO.setJobcall(jobCallInfo.getName()); + salaryAcctEmployeePO.setJobcallId(jobCallInfo.getId()); + } + } + } + }); + getSalaryAcctEmployeeService(user).updateIgnoreNull(salaryAcctEmployeePO); + // 查询原来的薪资核算结果 List salaryAcctResultPOSOld = getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctEmpId(saveParam.getSalaryAcctEmpId()).build()); // 解密 diff --git a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java index 5b3d21231..20d2c37cc 100644 --- a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java @@ -9,6 +9,7 @@ import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.SalarySobExtRangePO; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.hrm.DeptInfo; +import com.engine.salary.entity.hrm.JobCallInfo; import com.engine.salary.entity.hrm.PositionInfo; import com.engine.salary.entity.hrm.SubCompanyInfo; import com.engine.salary.entity.hrm.dto.EmployeeInfoExpandDTO; @@ -288,6 +289,14 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee return SalaryI18nUtil.i18nList(employBiz.getDeptInfoList(departmentIds)); } + @Override + public DeptInfo getDeptInfoById(Long departmentId) { + if (departmentId == null) { + return null; + } + return SalaryI18nUtil.i18n(employBiz.getDeptInfoById(departmentId)); + } + @Override public List getVirtualDeptInfoList(List virtualDepartmentIds) { if (CollectionUtils.isEmpty(virtualDepartmentIds)) { @@ -302,6 +311,11 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee return SalaryI18nUtil.i18nList(employBiz.getSubCompanyInfoList(subDepartmentIds)); } + @Override + public SubCompanyInfo getSubCompanyInfoById(Long subDepartmentId) { + return SalaryI18nUtil.i18n(employBiz.getSubCompanyInfoById(subDepartmentId)); + } + @Override public List getVirtualSubCompanyInfoList(List virtualSubDepartmentIds) { if (CollectionUtils.isEmpty(virtualSubDepartmentIds)) { @@ -316,6 +330,11 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee return SalaryI18nUtil.i18nList(employBiz.listPositionInfo(positionIds)); } + @Override + public PositionInfo getPositionInfoById(Long positionId) { + return SalaryI18nUtil.i18n(employBiz.getPositionInfoById(positionId)); + } + @Override public List listEmployee() { List result = employBiz.listEmployee(); @@ -514,4 +533,12 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee } return SalaryI18nUtil.i18nList(employeeList); } + + @Override + public JobCallInfo getJobCallInfoById(Long jobCallId) { + if (jobCallId == null) { + return null; + } + return SalaryI18nUtil.i18n(getEmployMapper().getJobCallInfoById(jobCallId)); + } } From ec669c1f510ceee6a818185d22c5d395f00cf81c Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 25 Jul 2024 17:51:38 +0800 Subject: [PATCH 003/124] =?UTF-8?q?=E6=A0=B8=E7=AE=97=E6=97=B6=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E4=BA=BA=E5=91=98=E7=BB=84=E7=BB=87=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctFormulaBO.java | 73 ++++++++++----- .../salaryacct/bo/SalaryAcctResultBO.java | 6 +- .../dto/SalaryFormulaEmployeeDTO.java | 2 + .../salaryacct/SalaryAcctEmployeeMapper.xml | 90 ++++++++----------- 4 files changed, 95 insertions(+), 76 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java index fecdd2999..32028e25a 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java @@ -1,6 +1,7 @@ package com.engine.salary.entity.salaryacct.bo; import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryformula.dto.SalaryFormulaEmployeeDTO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.po.SalarySobBackItemPO; @@ -71,7 +72,7 @@ public class SalaryAcctFormulaBO { * @param simpleEmployee * @return */ - public static Map convert2FormulaEmployee(DataCollectionEmployee simpleEmployee) { + public static Map convert2FormulaEmployee(DataCollectionEmployee simpleEmployee, SalaryAcctEmployeePO salaryAcctEmployeePO, boolean dynamicEmpInfo) { if (simpleEmployee == null) { return Collections.emptyMap(); } @@ -79,27 +80,55 @@ public class SalaryAcctFormulaBO { .map(sex -> StringUtils.equals(sex, "0") ? SalaryI18nUtil.getI18nLabel(102440, "男") : SalaryI18nUtil.getI18nLabel(102442, "女")) .orElse(StringUtils.EMPTY); - SalaryFormulaEmployeeDTO formulaEmployee = SalaryFormulaEmployeeDTO.builder() - .employeeId(simpleEmployee.getEmployeeId()) - .username(simpleEmployee.getUsername()) - .email(simpleEmployee.getEmail()) - .mobile(simpleEmployee.getMobile()) - .telephone(simpleEmployee.getTelephone()) - .sex(sexName) - .status(simpleEmployee.getStatus()) - .statusName(simpleEmployee.getStatusName()) - .departmentName(simpleEmployee.getDepartmentName()) - .departmentId(simpleEmployee.getDepartmentId()) - .subcompanyName(simpleEmployee.getSubcompanyName()) - .jobtitleName(simpleEmployee.getJobtitleName()) - .jobtitleId(simpleEmployee.getJobtitleId()) - .jobcall(simpleEmployee.getJobcall()) - .jobcallId(simpleEmployee.getJobcallId()) - .companystartdate(simpleEmployee.getCompanystartdate()) - .birthday(simpleEmployee.getBirthday()) - .workcode(simpleEmployee.getWorkcode()) - .idNo(simpleEmployee.getIdNo()) - .build(); + + SalaryFormulaEmployeeDTO formulaEmployee = null; + if (dynamicEmpInfo) { + formulaEmployee = SalaryFormulaEmployeeDTO.builder() + .employeeId(simpleEmployee.getEmployeeId()) + .username(simpleEmployee.getUsername()) + .email(simpleEmployee.getEmail()) + .mobile(simpleEmployee.getMobile()) + .telephone(simpleEmployee.getTelephone()) + .sex(sexName) + .status(simpleEmployee.getStatus()) + .statusName(simpleEmployee.getStatusName()) + .departmentName(simpleEmployee.getDepartmentName()) + .departmentId(simpleEmployee.getDepartmentId()) + .subcompanyName(simpleEmployee.getSubcompanyName()) + .subcompanyId(simpleEmployee.getSubcompanyid()) + .jobtitleName(simpleEmployee.getJobtitleName()) + .jobtitleId(simpleEmployee.getJobtitleId()) + .jobcall(simpleEmployee.getJobcall()) + .jobcallId(simpleEmployee.getJobcallId()) + .companystartdate(simpleEmployee.getCompanystartdate()) + .birthday(simpleEmployee.getBirthday()) + .workcode(simpleEmployee.getWorkcode()) + .idNo(simpleEmployee.getIdNo()) + .build(); + } else { + formulaEmployee = SalaryFormulaEmployeeDTO.builder() + .employeeId(simpleEmployee.getEmployeeId()) + .username(simpleEmployee.getUsername()) + .email(simpleEmployee.getEmail()) + .mobile(simpleEmployee.getMobile()) + .telephone(simpleEmployee.getTelephone()) + .sex(sexName) + .status(simpleEmployee.getStatus()) + .statusName(simpleEmployee.getStatusName()) + .departmentName(salaryAcctEmployeePO.getDepartmentName()) + .departmentId(salaryAcctEmployeePO.getDepartmentId()) + .subcompanyName(salaryAcctEmployeePO.getSubcompanyName()) + .subcompanyId(salaryAcctEmployeePO.getSubcompanyId()) + .jobtitleName(salaryAcctEmployeePO.getJobtitleName()) + .jobtitleId(salaryAcctEmployeePO.getJobtitleId()) + .jobcall(salaryAcctEmployeePO.getJobcall()) + .jobcallId(salaryAcctEmployeePO.getJobcallId()) + .companystartdate(simpleEmployee.getCompanystartdate()) + .birthday(simpleEmployee.getBirthday()) + .workcode(simpleEmployee.getWorkcode()) + .idNo(simpleEmployee.getIdNo()) + .build(); + } return JsonUtil.parseMap(JsonUtil.toJsonString(formulaEmployee), String.class); } } diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index d5b619a81..268da68d4 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -282,7 +282,7 @@ public class SalaryAcctResultBO { Map dataTypeMap = SalaryEntityUtil.convert2Map(salaryItems, salaryItemPO -> salaryItemPO.getId() + DATA_TYPE_SUFFIX, SalaryItemPO::getDataType); map.putAll(dataTypeMap); // 人员信息字段的值 - Map fieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(employeeMap.get(e.getEmployeeId())); + Map fieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(employeeMap.get(e.getEmployeeId()), e, true); for (SalarySobEmpFieldPO salarySobEmpField : salarySobEmpFields) { // 员工信息字段的字段类型 if (dynamicEmpInfo) { @@ -369,7 +369,7 @@ public class SalaryAcctResultBO { boolean different = false; Map map = Maps.newHashMap(); // 员工信息字段的值 - Map fieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(employeeMap.get(salaryAcctEmployee.getEmployeeId())); + Map fieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(employeeMap.get(salaryAcctEmployee.getEmployeeId()), salaryAcctEmployee, false); for (SalarySobEmpFieldPO salarySobEmpField : salarySobEmpFields) { // 员工信息字段的字段类型 if (dynamicEmpInfo) { @@ -475,7 +475,7 @@ public class SalaryAcctResultBO { List lockItems) { // 员工信息字段 - Map employeeFieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(simpleEmployee); + Map employeeFieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(simpleEmployee, salaryAcctEmployee, false); // 个税扣缴义务人 employeeFieldValueMap.put("taxAgentName", Optional.ofNullable(taxAgentPO).map(TaxAgentPO::getName).orElse(StringUtils.EMPTY)); Map employeeFieldNameMap = buildEmployeeFieldName(); diff --git a/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java b/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java index 4c5856fb1..1e8fd59cc 100644 --- a/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java +++ b/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java @@ -41,6 +41,8 @@ public class SalaryFormulaEmployeeDTO { @SalaryFormulaVar(defaultLabel = "分部", labelId = 82465, dataType = "subcompanyBrowser") private String subcompanyName; + private Long subcompanyId; + //岗位 diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml index cc4a386da..d0a5e2311 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml @@ -1369,77 +1369,65 @@ UPDATE hrsa_salary_acct_emp - - salary_acct_record_id=#{salaryAcctRecordId}, + + salary_acct_record_id=#{salaryAcctEmployeePO.salaryAcctRecordId}, - - salary_sob_id=#{salarySobId}, + + salary_sob_id=#{salaryAcctEmployeePO.salarySobId}, - - employee_id=#{employeeId}, + + employee_id=#{salaryAcctEmployeePO.employeeId}, - - tax_agent_id=#{taxAgentId}, + + tax_agent_id=#{salaryAcctEmployeePO.taxAgentId}, - - salary_month=#{salaryMonth}, + + salary_month=#{salaryAcctEmployeePO.salaryMonth}, - - creator=#{creator}, + + create_time=#{salaryAcctEmployeePO.createTime}, - - create_time=#{createTime}, + + update_time=#{salaryAcctEmployeePO.updateTime}, - - update_time=#{updateTime}, + + tenant_key=#{salaryAcctEmployeePO.tenantKey}, - - delete_type=#{deleteType}, + + employee_type=#{salaryAcctEmployeePO.employeeType}, - - tenant_key=#{tenantKey}, + + lock_status=#{salaryAcctEmployeePO.lockStatus}, - - employee_type=#{employeeType}, + + subcompany_name=#{salaryAcctEmployeePO.subcompanyName}, - - income_category=#{incomeCategory}, + + subcompany_id=#{salaryAcctEmployeePO.subcompanyId}, - - lock_status=#{lockStatus}, + + department_name=#{salaryAcctEmployeePO.departmentName}, - - subcompany_name=#{subcompanyName}, + + department_id=#{salaryAcctEmployeePO.departmentId}, - - subcompany_id=#{subcompanyId}, + + jobtitle_name=#{salaryAcctEmployeePO.jobtitleName}, - - department_name=#{departmentName}, + + jobtitle_id=#{salaryAcctEmployeePO.jobtitleId}, - - department_id=#{departmentId}, + + jobcall=#{salaryAcctEmployeePO.jobcall}, - - jobtitle_name=#{jobtitleName}, + + jobcall_id=#{salaryAcctEmployeePO.jobcallId}, - - jobtitle_id=#{jobtitleId}, - - - jobcall=#{jobcall}, - - - jobcall_id=#{jobcallId}, - - - status=#{status}, - - - lock_time=#{lockTime}, + + status=#{salaryAcctEmployeePO.status}, - WHERE id = #{id} AND delete_type = 0 + WHERE id = #{salaryAcctEmployeePO.id} AND delete_type = 0 From 9819bb25e0339f2727692a546527fdf8a5a6c41d Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 29 Jul 2024 10:58:41 +0800 Subject: [PATCH 004/124] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=A4=BE=E4=BF=9D?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E5=8F=B0=E8=B4=A6=E8=A1=A5=E5=B7=AE=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SIBalanceServiceImpl.java | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/com/engine/salary/service/impl/SIBalanceServiceImpl.java b/src/com/engine/salary/service/impl/SIBalanceServiceImpl.java index b9ec0de27..bb0c776b3 100644 --- a/src/com/engine/salary/service/impl/SIBalanceServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIBalanceServiceImpl.java @@ -167,13 +167,18 @@ public class SIBalanceServiceImpl extends Service implements SIBalanceService { List> resultList = new ArrayList<>(); - if (socialSchemePO != null && StringUtils.isNotBlank(socialSchemePO.getSocialPaymentBaseString())) { + if (socialSchemePO != null && (StringUtils.isNotBlank(socialSchemePO.getSocialPaymentBaseString()) || StringUtils.isNotBlank(socialSchemePO.getSocialPaymentComBaseString()) )) { Map socialMap = JSON.parseObject(socialSchemePO.getSocialPaymentBaseString(), new HashMap().getClass()); + Map socialComMap = JSON.parseObject(socialSchemePO.getSocialPaymentComBaseString(), new HashMap().getClass()); + List socialIds = new ArrayList<>(); + socialIds.addAll(socialMap.keySet()); + socialIds.addAll(socialComMap.keySet()); + socialIds = socialIds.stream().distinct().collect(Collectors.toList()); //查询该福利方案下开启缴纳的福利项 List insuranceIdAndScopeList = payInsuranceIdAndScopeList(socialSchemePO.getSocialSchemeId()); List insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().listBySchemeIds(Collections.singletonList(socialSchemePO.getSocialSchemeId())); Map schemeValidNumMap = SalaryEntityUtil.convert2Map(insuranceSchemeDetailPOS, po -> po.getInsuranceId() + "-" + po.getPaymentScope(), InsuranceSchemeDetailPO::getValidNum); - socialMap.forEach((k, v) -> { + socialIds.forEach(k -> { String welfareTypeName = welfareTypeMap.get(Long.valueOf(k)) == 1 ? "社保" : (welfareTypeMap.get(Long.valueOf(k)) == 2 ? "公积金" : "企业年金及其它福利" ); String welfareTypeSign = welfareTypeMap.get(Long.valueOf(k)) == 1 ? "social" : (welfareTypeMap.get(Long.valueOf(k)) == 2 ? "fund" : "other" ); if (insuranceIdAndScopeList.contains(k + "-" + PaymentScopeEnum.SCOPE_COMPANY.getValue())) { @@ -203,13 +208,18 @@ public class SIBalanceServiceImpl extends Service implements SIBalanceService { }); } - if (fundSchemePO != null && StringUtils.isNotBlank(fundSchemePO.getFundPaymentBaseString())) { + if (fundSchemePO != null && (StringUtils.isNotBlank(fundSchemePO.getFundPaymentBaseString()) || StringUtils.isNotBlank(fundSchemePO.getFundPaymentComBaseString()))) { Map fundMap = JSON.parseObject(fundSchemePO.getFundPaymentBaseString(), new HashMap().getClass()); + Map fundComMap = JSON.parseObject(fundSchemePO.getFundPaymentComBaseString(), new HashMap().getClass()); + List fundIds = new ArrayList<>(); + fundIds.addAll(fundMap.keySet()); + fundIds.addAll(fundComMap.keySet()); + fundIds = fundIds.stream().distinct().collect(Collectors.toList()); //查询该福利方案下开启缴纳的福利项 List insuranceIdAndScopeList = payInsuranceIdAndScopeList(fundSchemePO.getFundSchemeId()); List insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().listBySchemeIds(Collections.singletonList(fundSchemePO.getFundSchemeId())); Map schemeValidNumMap = SalaryEntityUtil.convert2Map(insuranceSchemeDetailPOS, po -> po.getInsuranceId() + "-" + po.getPaymentScope(), InsuranceSchemeDetailPO::getValidNum); - fundMap.forEach((k, v) -> { + fundIds.forEach(k -> { String welfareTypeName = welfareTypeMap.get(Long.valueOf(k)) == 1 ? "社保" : (welfareTypeMap.get(Long.valueOf(k)) == 2 ? "公积金" : "企业年金及其它福利" ); String welfareTypeSign = welfareTypeMap.get(Long.valueOf(k)) == 1 ? "social" : (welfareTypeMap.get(Long.valueOf(k)) == 2 ? "fund" : "other" ); if (insuranceIdAndScopeList.contains(k + "-" + PaymentScopeEnum.SCOPE_COMPANY.getValue())) { @@ -239,14 +249,19 @@ public class SIBalanceServiceImpl extends Service implements SIBalanceService { }); } - if (otherSchemePO != null && StringUtils.isNotBlank(otherSchemePO.getOtherPaymentBaseString())) { + if (otherSchemePO != null && (StringUtils.isNotBlank(otherSchemePO.getOtherPaymentBaseString()) || StringUtils.isNotBlank(otherSchemePO.getOtherPaymentComBaseString()))) { Map otherMap = JSON.parseObject(otherSchemePO.getOtherPaymentBaseString(), new HashMap().getClass()); + Map otherComMap = JSON.parseObject(otherSchemePO.getOtherPaymentComBaseString(), new HashMap().getClass()); + List otherIds = new ArrayList<>(); + otherIds.addAll(otherMap.keySet()); + otherIds.addAll(otherComMap.keySet()); + otherIds = otherIds.stream().distinct().collect(Collectors.toList()); //查询该福利方案下开启缴纳的福利项 List insuranceIdAndScopeList = payInsuranceIdAndScopeList(otherSchemePO.getOtherSchemeId()); List insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().listBySchemeIds(Collections.singletonList(otherSchemePO.getOtherSchemeId())); Map schemeValidNumMap = SalaryEntityUtil.convert2Map(insuranceSchemeDetailPOS, po -> po.getInsuranceId() + "-" + po.getPaymentScope(), InsuranceSchemeDetailPO::getValidNum); - otherMap.forEach((k, v) -> { + otherIds.forEach(k -> { String welfareTypeName = welfareTypeMap.get(Long.valueOf(k)) == 1 ? "社保" : (welfareTypeMap.get(Long.valueOf(k)) == 2 ? "公积金" : "企业年金及其它福利" ); String welfareTypeSign = welfareTypeMap.get(Long.valueOf(k)) == 1 ? "social" : (welfareTypeMap.get(Long.valueOf(k)) == 2 ? "fund" : "other" ); if (insuranceIdAndScopeList.contains(k + "-" + PaymentScopeEnum.SCOPE_COMPANY.getValue())) { From 0c3610961f66469b66592698da03f2477bb74fe1 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 30 Jul 2024 17:29:12 +0800 Subject: [PATCH 005/124] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=A4=BE=E4=BF=9D?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=A1=A3=E6=A1=88=20=E9=AB=98=E7=BA=A7?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E5=90=8E=E4=B8=8B=E8=BD=BD=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E6=A8=A1=E6=9D=BFbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SIImportServiceImpl.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/com/engine/salary/service/impl/SIImportServiceImpl.java b/src/com/engine/salary/service/impl/SIImportServiceImpl.java index 03a4b00ea..553a6fba1 100644 --- a/src/com/engine/salary/service/impl/SIImportServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIImportServiceImpl.java @@ -142,6 +142,18 @@ public class SIImportServiceImpl extends Service implements SIImportService { int total = (int)pageInfo.getTotal(); param.setPageSize(total); param.setCurrent(1); + if (CollectionUtils.isNotEmpty(param.getDepartmentIds())) { + param.setDepartmentIdsStr(StringUtils.join(param.getDepartmentIds(), ",")); + } + if (CollectionUtils.isNotEmpty(param.getSubcompanyIds())) { + param.setSubcompanyIdsStr(StringUtils.join(param.getSubcompanyIds(), ",")); + } + if (CollectionUtils.isNotEmpty(param.getPositions())) { + param.setPositionsStr(StringUtils.join(param.getPositions(), ",")); + } + if (CollectionUtils.isNotEmpty(param.getStatuses())) { + param.setStatusesStr(StringUtils.join(param.getStatuses(), ",")); + } Map dataMap = getSIArchivesService(user).listPage(param); List> records = (List>)dataMap.get("datas"); From 241a85c71153b0c3dd7f633ad43a77ac023cade4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 31 Jul 2024 14:59:03 +0800 Subject: [PATCH 006/124] =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index 268da68d4..64cd96f9f 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -620,7 +620,7 @@ public class SalaryAcctResultBO { Map formulaContentMap, List lockItems) { - SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByValue(Optional.ofNullable(salarySobItemPO).map(SalarySobItemPO::getValueType).orElse(0)); + SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByValue(Optional.ofNullable(salarySobItemPO).map(SalarySobItemPO::getValueType).orElse(1)); String itemFormulaContent; if (Objects.equals(salaryValueTypeEnum.getValue(), SalaryValueTypeEnum.FORMULA.getValue())) { itemFormulaContent = Optional.ofNullable(formulaContentMap.get(salarySobItemPO.getSalaryItemId().toString())).map(SalaryAcctResultListColumnDTO::getFormulaContent).orElse(""); From 8bbf8f3ff61fd67c6c90c09cdfa0630de25691a2 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 1 Aug 2024 10:52:44 +0800 Subject: [PATCH 007/124] =?UTF-8?q?=E6=A0=B8=E7=AE=97=E6=97=B6=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E8=81=8C=E7=A7=B0bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java | 3 +++ src/com/engine/salary/mapper/datacollection/EmployMapper.xml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index 268da68d4..005b6ddd0 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -498,6 +498,9 @@ public class SalaryAcctResultBO { Map fieldValueMap = new HashMap<>(); fieldValueMap.put("id", employeeFieldValueMap.getOrDefault(codeKey + "Id", StringUtils.EMPTY)); fieldValueMap.put("name", employeeFieldValueMap.getOrDefault(codeKey + "Name", StringUtils.EMPTY)); + if (codeKey.equals("jobcall")) { + fieldValueMap.put("name", employeeFieldValueMap.getOrDefault( "jobcall", StringUtils.EMPTY)); + } dto.setFieldValue(fieldValueMap); } return dto; diff --git a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml index e19952e21..ae903a6a7 100644 --- a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml +++ b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml @@ -611,7 +611,7 @@ From ff00de206c1f058cfcc56bd3333fdf1ce5bff117 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 5 Aug 2024 17:23:25 +0800 Subject: [PATCH 008/124] =?UTF-8?q?=E7=BA=BF=E4=B8=8B=E5=AF=B9=E6=AF=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctResultBO.java | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index e33fcc2fe..ef1dcca05 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.salaryacct.bo; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import com.engine.salary.annotation.SalaryFormulaVar; import com.engine.salary.component.WeaTableColumnGroup; @@ -35,6 +36,7 @@ import org.springframework.beans.BeanUtils; import weaver.general.Util; import java.lang.reflect.Field; +import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @@ -305,7 +307,7 @@ public class SalaryAcctResultBO { } else if ("status".equals(salarySobEmpField.getFieldCode())) { map.put("status", e.getStatus()); } else if ("statusName".equals(salarySobEmpField.getFieldCode())) { - map.put("statusName", UserStatusEnum.getDefaultLabelByValue(new Integer(Util.null2s(e.getStatus(),"1")))); + map.put("statusName", UserStatusEnum.getDefaultLabelByValue(new Integer(Util.null2s(e.getStatus(), "1")))); } else { map.put(salarySobEmpField.getFieldCode(), fieldValueMap.get(salarySobEmpField.getFieldCode())); } @@ -418,13 +420,20 @@ public class SalaryAcctResultBO { // 薪资项目字段的字段类型 map.put(salaryItem.getId() + DATA_TYPE_SUFFIX, salaryItem.getDataType()); SalaryDataTypeEnum dataTypeEnum = SalaryDataTypeEnum.parseByValue(salaryItem.getDataType()); - if (dataTypeEnum == SalaryDataTypeEnum.STRING) { - if (!StringUtils.equals(acctResultValue, excelResultValue)) { - different = true; - includeSalaryItemIds.add(salaryItem.getId()); + if (dataTypeEnum == SalaryDataTypeEnum.NUMBER) { + if (NumberUtil.isNumber(acctResultValue) && NumberUtil.isNumber(excelResultValue)) { + if (new BigDecimal(acctResultValue).compareTo(new BigDecimal(excelResultValue)) != 0) { + different = true; + includeSalaryItemIds.add(salaryItem.getId()); + } + } else { + if (SalaryEntityUtil.empty2Zero(acctResultValue).compareTo(SalaryEntityUtil.empty2Zero(excelResultValue)) != 0) { + different = true; + includeSalaryItemIds.add(salaryItem.getId()); + } } } else { - if (SalaryEntityUtil.empty2Zero(acctResultValue).compareTo(SalaryEntityUtil.empty2Zero(excelResultValue)) != 0) { + if (!StringUtils.equals(acctResultValue, excelResultValue)) { different = true; includeSalaryItemIds.add(salaryItem.getId()); } @@ -499,7 +508,7 @@ public class SalaryAcctResultBO { fieldValueMap.put("id", employeeFieldValueMap.getOrDefault(codeKey + "Id", StringUtils.EMPTY)); fieldValueMap.put("name", employeeFieldValueMap.getOrDefault(codeKey + "Name", StringUtils.EMPTY)); if (codeKey.equals("jobcall")) { - fieldValueMap.put("name", employeeFieldValueMap.getOrDefault( "jobcall", StringUtils.EMPTY)); + fieldValueMap.put("name", employeeFieldValueMap.getOrDefault("jobcall", StringUtils.EMPTY)); } dto.setFieldValue(fieldValueMap); } @@ -511,11 +520,11 @@ public class SalaryAcctResultBO { // 过滤出是浏览框类型的且人员信息中同时存在名称和id的字段 employeeInfos.stream() .filter(e -> e.getFieldType().contains("Browser")) - .map(e -> SalaryAcctEmployeeInfoDTO.builder().fieldName(e.getFieldName().replace("ID","")).build()) + .map(e -> SalaryAcctEmployeeInfoDTO.builder().fieldName(e.getFieldName().replace("ID", "")).build()) .collect(Collectors.groupingBy(SalaryAcctEmployeeInfoDTO::getFieldName)) - .forEach((k,v) -> { + .forEach((k, v) -> { if (v.size() > 1) { - needRemoveFieldNames.add(k+"ID"); + needRemoveFieldNames.add(k + "ID"); } }); From 10d988084bb0e8e5b37296d4484d634a2219f59f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 6 Aug 2024 10:32:57 +0800 Subject: [PATCH 009/124] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryitem/config/FormulaConfig.java | 62 +++++ .../salaryitem/config/FormulaVarConfig.java | 44 ++++ .../salaryitem/config/SalaryItemConfig.java | 134 +++++++++++ .../salaryitem/dto/SalaryItemConfig.java | 221 ++++++++++++++++++ .../param/SalaryItemExportParam.java | 26 +++ .../mapper/salaryitem/SalaryItemMapper.java | 4 + .../mapper/salaryitem/SalaryItemMapper.xml | 176 +++++++++++--- .../salary/service/SalaryItemService.java | 4 + .../service/impl/SalaryItemServiceImpl.java | 22 +- .../salary/web/SalaryItemController.java | 15 +- .../salary/wrapper/SalaryItemWrapper.java | 10 + 11 files changed, 676 insertions(+), 42 deletions(-) create mode 100644 src/com/engine/salary/entity/salaryitem/config/FormulaConfig.java create mode 100644 src/com/engine/salary/entity/salaryitem/config/FormulaVarConfig.java create mode 100644 src/com/engine/salary/entity/salaryitem/config/SalaryItemConfig.java create mode 100644 src/com/engine/salary/entity/salaryitem/dto/SalaryItemConfig.java create mode 100644 src/com/engine/salary/entity/salaryitem/param/SalaryItemExportParam.java diff --git a/src/com/engine/salary/entity/salaryitem/config/FormulaConfig.java b/src/com/engine/salary/entity/salaryitem/config/FormulaConfig.java new file mode 100644 index 000000000..ba3f45f5e --- /dev/null +++ b/src/com/engine/salary/entity/salaryitem/config/FormulaConfig.java @@ -0,0 +1,62 @@ +package com.engine.salary.entity.salaryitem.config; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.util.List; + + +@Data +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +public class FormulaConfig { + + /** + * 名称 + */ + private String name; + /** + * 备注 + */ + private String description; + /** + * 模块 + */ + private String module; + /** + * 用途 + */ + private String useFor; + /** + * 引用类型 + */ + private String referenceType; + /** + * 返回类型 + */ + private String returnType; + /** + * 校验类型 + */ + private String validateType; + /** + * 扩展参数 + */ + private String extendParam; + /** + * 公式内容 + */ + private String formula; + + /** + * 公式实际运行脚本 + */ + private String formulaRunScript; + + + private List vars; + +} diff --git a/src/com/engine/salary/entity/salaryitem/config/FormulaVarConfig.java b/src/com/engine/salary/entity/salaryitem/config/FormulaVarConfig.java new file mode 100644 index 000000000..0144a4055 --- /dev/null +++ b/src/com/engine/salary/entity/salaryitem/config/FormulaVarConfig.java @@ -0,0 +1,44 @@ +package com.engine.salary.entity.salaryitem.config; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + + +@Data +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +public class FormulaVarConfig { + + /** + * 名称 + */ + private String name; + /** + * 公式id + */ + private Long formulaId; + /** + * 字段id + */ + private String fieldId; + /** + * 字段名称 + */ + private String fieldName; + /** + * 字段类型,number,string + */ + private String fieldType; + /** + * 来源 + */ + private String source; + /** + * 排序 + */ + private Integer orderIndex; + +} diff --git a/src/com/engine/salary/entity/salaryitem/config/SalaryItemConfig.java b/src/com/engine/salary/entity/salaryitem/config/SalaryItemConfig.java new file mode 100644 index 000000000..2e0d85f7c --- /dev/null +++ b/src/com/engine/salary/entity/salaryitem/config/SalaryItemConfig.java @@ -0,0 +1,134 @@ +package com.engine.salary.entity.salaryitem.config; + +import com.engine.salary.enums.SalaryRoundingModeEnum; +import com.engine.salary.enums.SalarySystemTypeEnum; +import com.engine.salary.enums.SalaryValueTypeEnum; +import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + + +@Data +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +public class SalaryItemConfig { + /** + * 主键id + */ + private Long id; + + /** + * 名称 + */ + private String name; + + /** + * 编号 + */ + private String code; + + /** + * 是否是系统项目 + * + * @see SalarySystemTypeEnum + */ + private Integer systemType; + + /** + * 系统薪资项目的id(是从哪个系统薪资项目复制过来的) + */ + private Long sysSalaryItemId; + + /** + * 默认使用。0:默认不适用、1:默认使用 + */ + private Integer useDefault; + + /** + * 薪资档案引用。0:薪资档案未引用、1:薪资档案引用 + */ + private Integer useInEmployeeSalary; + + /** + * 核算时隐藏 + */ + private Integer hideDefault; + + /** + * 进位规则 + * + * @see SalaryRoundingModeEnum + */ + private Integer roundingMode; + + /** + * 保留的小数位数 + */ + private Integer pattern; + + /** + * 取值方式 + * + * @see SalaryValueTypeEnum + */ + private Integer valueType; + + /** + * 字段类型 + * + * @see SalaryDataTypeEnum + */ + private String dataType; + + /** + * 公式 + */ + private Long formulaId; + + /** + * 备注 + */ + private String description; + + /** + * 是否可以编辑。0:不可编辑、1:可编辑 + */ + private Integer canEdit; + + /** + * 可见性 + */ + private Integer sharedType; + + /** + * 可见范围 + */ + private String taxAgentIds; + + /** + * 0不可删除,1可删除 + */ + private Integer canDelete; + + /** + * 排序 + */ + private Integer sortedIndex; + + /** + * 宽度 + */ + private Integer width; + + /** + * 默认值 + */ + private String defaultValue; + + + private FormulaConfig formula; + +} diff --git a/src/com/engine/salary/entity/salaryitem/dto/SalaryItemConfig.java b/src/com/engine/salary/entity/salaryitem/dto/SalaryItemConfig.java new file mode 100644 index 000000000..2219ac013 --- /dev/null +++ b/src/com/engine/salary/entity/salaryitem/dto/SalaryItemConfig.java @@ -0,0 +1,221 @@ +package com.engine.salary.entity.salaryitem.dto; + +import com.engine.salary.enums.SalaryRoundingModeEnum; +import com.engine.salary.enums.SalarySystemTypeEnum; +import com.engine.salary.enums.SalaryValueTypeEnum; +import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.util.List; + + +@Data +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +public class SalaryItemConfig { + /** + * 主键id + */ + private Long id; + + /** + * 名称 + */ + private String name; + + /** + * 编号 + */ + private String code; + + /** + * 是否是系统项目 + * + * @see SalarySystemTypeEnum + */ + private Integer systemType; + + /** + * 系统薪资项目的id(是从哪个系统薪资项目复制过来的) + */ + private Long sysSalaryItemId; + + /** + * 默认使用。0:默认不适用、1:默认使用 + */ + private Integer useDefault; + + /** + * 薪资档案引用。0:薪资档案未引用、1:薪资档案引用 + */ + private Integer useInEmployeeSalary; + + /** + * 核算时隐藏 + */ + private Integer hideDefault; + + /** + * 进位规则 + * + * @see SalaryRoundingModeEnum + */ + private Integer roundingMode; + + /** + * 保留的小数位数 + */ + private Integer pattern; + + /** + * 取值方式 + * + * @see SalaryValueTypeEnum + */ + private Integer valueType; + + /** + * 字段类型 + * + * @see SalaryDataTypeEnum + */ + private String dataType; + + /** + * 公式 + */ + private Long formulaId; + + /** + * 备注 + */ + private String description; + + /** + * 是否可以编辑。0:不可编辑、1:可编辑 + */ + private Integer canEdit; + + /** + * 可见性 + */ + private Integer sharedType; + + /** + * 可见范围 + */ + private String taxAgentIds; + + /** + * 0不可删除,1可删除 + */ + private Integer canDelete; + + /** + * 排序 + */ + private Integer sortedIndex; + + /** + * 宽度 + */ + private Integer width; + + /** + * 默认值 + */ + private String defaultValue; + + + private Formula formula; + + @Data + static + class Formula { + + /** + * 名称 + */ + private String name; + /** + * 备注 + */ + private String description; + /** + * 模块 + */ + private String module; + /** + * 用途 + */ + private String useFor; + /** + * 引用类型 + */ + private String referenceType; + /** + * 返回类型 + */ + private String returnType; + /** + * 校验类型 + */ + private String validateType; + /** + * 扩展参数 + */ + private String extendParam; + /** + * 公式内容 + */ + private String formula; + + /** + * 公式实际运行脚本 + */ + private String formulaRunScript; + + private List vars; + + @Data + static + class formulaVar { + + /** + * 名称 + */ + private String name; + /** + * 公式id + */ + private Long formulaId; + /** + * 字段id + */ + private String fieldId; + /** + * 字段名称 + */ + private String fieldName; + /** + * 字段类型,number,string + */ + private String fieldType; + /** + * 来源 + */ + private String source; + /** + * 排序 + */ + private Integer orderIndex; + } + + + } + +} diff --git a/src/com/engine/salary/entity/salaryitem/param/SalaryItemExportParam.java b/src/com/engine/salary/entity/salaryitem/param/SalaryItemExportParam.java new file mode 100644 index 000000000..bf368aa9e --- /dev/null +++ b/src/com/engine/salary/entity/salaryitem/param/SalaryItemExportParam.java @@ -0,0 +1,26 @@ +package com.engine.salary.entity.salaryitem.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 导出参数 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryItemExportParam { + + private List ids; + +} diff --git a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java index 52ee57b51..fd85bbf52 100644 --- a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java +++ b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java @@ -1,5 +1,6 @@ package com.engine.salary.mapper.salaryitem; +import com.engine.salary.entity.salaryitem.dto.SalaryItemConfig; import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import org.apache.ibatis.annotations.Param; @@ -68,4 +69,7 @@ public interface SalaryItemMapper { void batchUpdateSortedIndex(@Param("collection")List salaryItemPOS); + List getConfig(@Param("ids") Collection ids); + + } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml index 7b8f39b3b..6a8733468 100644 --- a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml +++ b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml @@ -406,12 +406,12 @@ update_time, creator, delete_type, tenant_key, data_type, shared_type, tax_agent_ids) VALUES - (#{item.id},#{item.name}, #{item.code}, #{item.systemType}, #{item.sysSalaryItemId}, - #{item.useDefault}, #{item.useInEmployeeSalary}, #{item.roundingMode}, - #{item.pattern}, - #{item.valueType}, #{item.formulaId}, #{item.description}, #{item.canEdit}, - #{item.createTime}, #{item.updateTime}, #{item.creator}, 0, #{item.tenantKey}, #{item.dataType}, - #{item.sharedType}, #{item.taxAgentIds}) + (#{item_id},#{item_name}, #{item_code}, #{item_systemType}, #{item_sysSalaryItemId}, + #{item_useDefault}, #{item_useInEmployeeSalary}, #{item_roundingMode}, + #{item_pattern}, + #{item_valueType}, #{item_formulaId}, #{item_description}, #{item_canEdit}, + #{item_createTime}, #{item_updateTime}, #{item_creator}, 0, #{item_tenantKey}, #{item_dataType}, + #{item_sharedType}, #{item_taxAgentIds}) @@ -422,27 +422,27 @@ select - #{item.id,jdbcType=DOUBLE}, - #{item.name,jdbcType=VARCHAR}, - #{item.code,jdbcType=VARCHAR}, - #{item.systemType,jdbcType=INTEGER}, - #{item.sysSalaryItemId,jdbcType=DOUBLE}, - #{item.useDefault,jdbcType=INTEGER}, - #{item.useInEmployeeSalary,jdbcType=INTEGER}, - #{item.roundingMode,jdbcType=INTEGER}, - #{item.pattern,jdbcType=INTEGER}, - #{item.valueType,jdbcType=INTEGER}, - #{item.formulaId,jdbcType=DOUBLE}, - #{item.description,jdbcType=VARCHAR}, - #{item.canEdit,jdbcType=INTEGER}, - #{item.createTime,jdbcType=DATE}, - #{item.updateTime,jdbcType=DATE}, - #{item.creator,jdbcType=DOUBLE}, + #{item_id,jdbcType=DOUBLE}, + #{item_name,jdbcType=VARCHAR}, + #{item_code,jdbcType=VARCHAR}, + #{item_systemType,jdbcType=INTEGER}, + #{item_sysSalaryItemId,jdbcType=DOUBLE}, + #{item_useDefault,jdbcType=INTEGER}, + #{item_useInEmployeeSalary,jdbcType=INTEGER}, + #{item_roundingMode,jdbcType=INTEGER}, + #{item_pattern,jdbcType=INTEGER}, + #{item_valueType,jdbcType=INTEGER}, + #{item_formulaId,jdbcType=DOUBLE}, + #{item_description,jdbcType=VARCHAR}, + #{item_canEdit,jdbcType=INTEGER}, + #{item_createTime,jdbcType=DATE}, + #{item_updateTime,jdbcType=DATE}, + #{item_creator,jdbcType=DOUBLE}, 0, - #{item.tenantKey,jdbcType=VARCHAR}, - #{item.dataType,jdbcType=VARCHAR}, - #{item.sharedType,jdbcType=INTEGER}, - #{item.taxAgentIds,jdbcType=VARCHAR} + #{item_tenantKey,jdbcType=VARCHAR}, + #{item_dataType,jdbcType=VARCHAR}, + #{item_sharedType,jdbcType=INTEGER}, + #{item_taxAgentIds,jdbcType=VARCHAR} from dual @@ -453,12 +453,12 @@ rounding_mode, pattern, value_type, formula_id, description, can_edit, create_time, update_time, creator, delete_type, tenant_key, data_type, shared_type, tax_agent_ids) VALUES - (#{item.id},#{item.name}, #{item.code}, #{item.systemType}, #{item.sysSalaryItemId}, - #{item.useDefault}, #{item.useInEmployeeSalary}, #{item.roundingMode}, - #{item.pattern}, - #{item.valueType}, #{item.formulaId}, #{item.description}, #{item.canEdit}, - #{item.createTime}, #{item.updateTime}, #{item.creator}, 0, #{item.tenantKey}, #{item.dataType}, - #{item.sharedType}, #{item.taxAgentIds}) + (#{item_id},#{item_name}, #{item_code}, #{item_systemType}, #{item_sysSalaryItemId}, + #{item_useDefault}, #{item_useInEmployeeSalary}, #{item_roundingMode}, + #{item_pattern}, + #{item_valueType}, #{item_formulaId}, #{item_description}, #{item_canEdit}, + #{item_createTime}, #{item_updateTime}, #{item_creator}, 0, #{item_tenantKey}, #{item_dataType}, + #{item_sharedType}, #{item_taxAgentIds}) @@ -476,8 +476,8 @@ - - when id=#{item.id} then #{item.sortedIndex} + + when id=#{item_id} then #{item_sortedIndex} @@ -485,7 +485,7 @@ where id in - #{item.id} + #{item_id} @@ -582,5 +582,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + item.name as item_name + , item.code as item_code + , item.system_type as item_system_type + , item.sys_salary_item_id as item_sys_salary_item_id + , item.use_default as item_use_default + , item.use_in_employee_salary as item_use_in_employee_salary + , item.rounding_mode as item_rounding_mode + , item.pattern as item_pattern + , item.value_type as item_value_type + , item.formula_id as item_formula_id + , item.description as item_description + , item.can_edit as item_can_edit + , item.can_delete as item_can_delete + , item.data_type as item_data_type + , item.shared_type as item_shared_type + , item.tax_agent_ids as item_tax_agent_ids + , item.sorted_index as item_sorted_index + , item.hide_default as item_hide_default + , item.width as item_width + , item.default_value as item_default_value + + + + + , formula.name as formula_name + , formula.description as formula_description + , formula.module as formula_module + , formula.use_for as formula_use_for + , formula.reference_type as formula_reference_type + , formula.return_type as formula_return_type + , formula.validate_type as formula_validate_type + , formula.extend_param as formula_extend_param + , formula.formula as formula_formula + , formula.formulaRunScript as formula_formulaRunScript + + + + , var.name as var_name + , var.formula_id as var_formula_id + , var.field_id as var_field_id + , var.field_name as var_field_name + , var.field_type as var_field_type + , var.source as var_source + , var.order_index as var_order_index + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/service/SalaryItemService.java b/src/com/engine/salary/service/SalaryItemService.java index ba661cc27..c5b2a35ae 100644 --- a/src/com/engine/salary/service/SalaryItemService.java +++ b/src/com/engine/salary/service/SalaryItemService.java @@ -1,5 +1,7 @@ package com.engine.salary.service; +import com.engine.salary.entity.salaryitem.dto.SalaryItemConfig; +import com.engine.salary.entity.salaryitem.param.SalaryItemExportParam; import com.engine.salary.entity.salaryitem.param.SalaryItemSaveParam; import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; import com.engine.salary.entity.salaryitem.param.SyncSalaryItemParam; @@ -147,4 +149,6 @@ public interface SalaryItemService { * @param syncSalaryItemParam */ void syncSalaryItemToSalarySobItem(SyncSalaryItemParam syncSalaryItemParam); + + List getConfig(SalaryItemExportParam param); } diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index a63bec4e6..ce1a641dc 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -1,15 +1,18 @@ package com.engine.salary.service.impl; import cn.hutool.core.util.StrUtil; +import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.biz.SalaryItemBiz; import com.engine.salary.biz.SysSalaryItemBiz; import com.engine.salary.config.SalaryElogConfig; -import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.entity.salaryformula.po.FormulaPO; import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.entity.salaryitem.bo.SalaryItemBO; +import com.engine.salary.entity.salaryitem.dto.SalaryItemConfig; +import com.engine.salary.entity.salaryitem.param.SalaryItemExportParam; import com.engine.salary.entity.salaryitem.param.SalaryItemSaveParam; import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; import com.engine.salary.entity.salaryitem.param.SyncSalaryItemParam; @@ -24,6 +27,7 @@ import com.engine.salary.enums.SalarySystemTypeEnum; import com.engine.salary.enums.SalaryValueTypeEnum; import com.engine.salary.enums.sicategory.SharedTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.salaryitem.SalaryItemMapper; import com.engine.salary.service.*; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; @@ -80,8 +84,10 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService } private SysSalaryItemBiz sysSalaryItemBiz = new SysSalaryItemBiz(); -// @Autowired -// private LoggerTemplate salaryItemLoggerTemplate; + + private SalaryItemMapper getSalaryItemMapper() { + return SqlProxyHandle.getProxy(SalaryItemMapper.class); + } @Override public SalaryItemPO getById(Long id) { @@ -505,4 +511,14 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService return UsingItem.builder().build(); } + + + + + @Override + public List getConfig(SalaryItemExportParam param) { + return getSalaryItemMapper().getConfig(param.getIds()); + } + + } diff --git a/src/com/engine/salary/web/SalaryItemController.java b/src/com/engine/salary/web/SalaryItemController.java index cae184b9b..aea4c47f5 100644 --- a/src/com/engine/salary/web/SalaryItemController.java +++ b/src/com/engine/salary/web/SalaryItemController.java @@ -2,13 +2,11 @@ package com.engine.salary.web; import com.engine.common.util.ServiceUtil; import com.engine.salary.component.WeaFormOption; +import com.engine.salary.entity.salaryitem.dto.SalaryItemConfig; import com.engine.salary.entity.salaryitem.dto.SalaryItemFormDTO; import com.engine.salary.entity.salaryitem.dto.SalaryItemListDTO; import com.engine.salary.entity.salaryitem.dto.SysSalaryItemListDTO; -import com.engine.salary.entity.salaryitem.param.SalaryItemSaveParam; -import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; -import com.engine.salary.entity.salaryitem.param.SyncSalaryItemParam; -import com.engine.salary.entity.salaryitem.param.SysSalaryItemSearchParam; +import com.engine.salary.entity.salaryitem.param.*; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.util.ResponseResult; import com.engine.salary.util.SalaryI18nUtil; @@ -183,6 +181,15 @@ public class SalaryItemController { return new ResponseResult(user).run(getSalaryItemWrapper(user)::update, saveParam); } + + @POST + @Path("/export") + @Produces(MediaType.APPLICATION_JSON) + public String updateSalaryItem(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryItemExportParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalaryItemWrapper(user)::export, param); + } + /**********************************自定义薪资项目 end*********************************/ diff --git a/src/com/engine/salary/wrapper/SalaryItemWrapper.java b/src/com/engine/salary/wrapper/SalaryItemWrapper.java index 1407d0f8d..5660c58de 100644 --- a/src/com/engine/salary/wrapper/SalaryItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryItemWrapper.java @@ -8,8 +8,10 @@ import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryitem.bo.SalaryItemBO; import com.engine.salary.entity.salaryitem.bo.SysSalaryItemBO; +import com.engine.salary.entity.salaryitem.dto.SalaryItemConfig; import com.engine.salary.entity.salaryitem.dto.SalaryItemFormDTO; import com.engine.salary.entity.salaryitem.dto.SalaryItemListDTO; +import com.engine.salary.entity.salaryitem.param.SalaryItemExportParam; import com.engine.salary.entity.salaryitem.param.SalaryItemSaveParam; import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; import com.engine.salary.entity.salaryitem.param.SyncSalaryItemParam; @@ -303,4 +305,12 @@ public class SalaryItemWrapper extends Service { public void syncSalaryItemToSalarySobItem(SyncSalaryItemParam syncSalaryItemParam) { getSalaryItemService(user).syncSalaryItemToSalarySobItem(syncSalaryItemParam); } + + public List export(SalaryItemExportParam param) { + + return getSalaryItemService(user).getConfig(param); + + + + } } From bd6e30b63bc2582b60a5a2c00789fe3fca00a30b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 6 Aug 2024 14:24:08 +0800 Subject: [PATCH 010/124] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E8=96=AA=E8=B5=84?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryitem/config/FormulaConfig.java | 4 + .../salaryitem/config/FormulaVarConfig.java | 5 + .../salaryitem/dto/SalaryItemConfig.java | 221 ------------------ .../param/SalaryItemImportParam.java | 26 +++ .../engine/salary/enums/SalaryOnOffEnum.java | 22 +- .../salary/enums/SalaryRoundingModeEnum.java | 2 +- .../salary/enums/SalaryValueTypeEnum.java | 4 +- .../mapper/salaryitem/SalaryItemMapper.java | 2 +- .../mapper/salaryitem/SalaryItemMapper.xml | 16 +- .../salary/service/SalaryItemService.java | 2 +- .../service/impl/SalaryItemServiceImpl.java | 2 +- .../salary/web/SalaryItemController.java | 37 ++- .../salary/wrapper/SalaryItemWrapper.java | 48 +++- 13 files changed, 146 insertions(+), 245 deletions(-) delete mode 100644 src/com/engine/salary/entity/salaryitem/dto/SalaryItemConfig.java create mode 100644 src/com/engine/salary/entity/salaryitem/param/SalaryItemImportParam.java diff --git a/src/com/engine/salary/entity/salaryitem/config/FormulaConfig.java b/src/com/engine/salary/entity/salaryitem/config/FormulaConfig.java index ba3f45f5e..9930fa059 100644 --- a/src/com/engine/salary/entity/salaryitem/config/FormulaConfig.java +++ b/src/com/engine/salary/entity/salaryitem/config/FormulaConfig.java @@ -13,6 +13,10 @@ import java.util.List; @NoArgsConstructor @AllArgsConstructor public class FormulaConfig { + /** + * 主键id + */ + private Long id; /** * 名称 diff --git a/src/com/engine/salary/entity/salaryitem/config/FormulaVarConfig.java b/src/com/engine/salary/entity/salaryitem/config/FormulaVarConfig.java index 0144a4055..32707b286 100644 --- a/src/com/engine/salary/entity/salaryitem/config/FormulaVarConfig.java +++ b/src/com/engine/salary/entity/salaryitem/config/FormulaVarConfig.java @@ -12,6 +12,11 @@ import lombok.experimental.Accessors; @AllArgsConstructor public class FormulaVarConfig { + /** + * 主键id + */ + private Long id; + /** * 名称 */ diff --git a/src/com/engine/salary/entity/salaryitem/dto/SalaryItemConfig.java b/src/com/engine/salary/entity/salaryitem/dto/SalaryItemConfig.java deleted file mode 100644 index 2219ac013..000000000 --- a/src/com/engine/salary/entity/salaryitem/dto/SalaryItemConfig.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.engine.salary.entity.salaryitem.dto; - -import com.engine.salary.enums.SalaryRoundingModeEnum; -import com.engine.salary.enums.SalarySystemTypeEnum; -import com.engine.salary.enums.SalaryValueTypeEnum; -import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; - -import java.util.List; - - -@Data -@Accessors(chain = true) -@NoArgsConstructor -@AllArgsConstructor -public class SalaryItemConfig { - /** - * 主键id - */ - private Long id; - - /** - * 名称 - */ - private String name; - - /** - * 编号 - */ - private String code; - - /** - * 是否是系统项目 - * - * @see SalarySystemTypeEnum - */ - private Integer systemType; - - /** - * 系统薪资项目的id(是从哪个系统薪资项目复制过来的) - */ - private Long sysSalaryItemId; - - /** - * 默认使用。0:默认不适用、1:默认使用 - */ - private Integer useDefault; - - /** - * 薪资档案引用。0:薪资档案未引用、1:薪资档案引用 - */ - private Integer useInEmployeeSalary; - - /** - * 核算时隐藏 - */ - private Integer hideDefault; - - /** - * 进位规则 - * - * @see SalaryRoundingModeEnum - */ - private Integer roundingMode; - - /** - * 保留的小数位数 - */ - private Integer pattern; - - /** - * 取值方式 - * - * @see SalaryValueTypeEnum - */ - private Integer valueType; - - /** - * 字段类型 - * - * @see SalaryDataTypeEnum - */ - private String dataType; - - /** - * 公式 - */ - private Long formulaId; - - /** - * 备注 - */ - private String description; - - /** - * 是否可以编辑。0:不可编辑、1:可编辑 - */ - private Integer canEdit; - - /** - * 可见性 - */ - private Integer sharedType; - - /** - * 可见范围 - */ - private String taxAgentIds; - - /** - * 0不可删除,1可删除 - */ - private Integer canDelete; - - /** - * 排序 - */ - private Integer sortedIndex; - - /** - * 宽度 - */ - private Integer width; - - /** - * 默认值 - */ - private String defaultValue; - - - private Formula formula; - - @Data - static - class Formula { - - /** - * 名称 - */ - private String name; - /** - * 备注 - */ - private String description; - /** - * 模块 - */ - private String module; - /** - * 用途 - */ - private String useFor; - /** - * 引用类型 - */ - private String referenceType; - /** - * 返回类型 - */ - private String returnType; - /** - * 校验类型 - */ - private String validateType; - /** - * 扩展参数 - */ - private String extendParam; - /** - * 公式内容 - */ - private String formula; - - /** - * 公式实际运行脚本 - */ - private String formulaRunScript; - - private List vars; - - @Data - static - class formulaVar { - - /** - * 名称 - */ - private String name; - /** - * 公式id - */ - private Long formulaId; - /** - * 字段id - */ - private String fieldId; - /** - * 字段名称 - */ - private String fieldName; - /** - * 字段类型,number,string - */ - private String fieldType; - /** - * 来源 - */ - private String source; - /** - * 排序 - */ - private Integer orderIndex; - } - - - } - -} diff --git a/src/com/engine/salary/entity/salaryitem/param/SalaryItemImportParam.java b/src/com/engine/salary/entity/salaryitem/param/SalaryItemImportParam.java new file mode 100644 index 000000000..15e2476af --- /dev/null +++ b/src/com/engine/salary/entity/salaryitem/param/SalaryItemImportParam.java @@ -0,0 +1,26 @@ +package com.engine.salary.entity.salaryitem.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 导入参数 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryItemImportParam { + + /** + * 上传文件id + */ + String imageId; +} diff --git a/src/com/engine/salary/enums/SalaryOnOffEnum.java b/src/com/engine/salary/enums/SalaryOnOffEnum.java index 7afb5aab0..d2662bb30 100644 --- a/src/com/engine/salary/enums/SalaryOnOffEnum.java +++ b/src/com/engine/salary/enums/SalaryOnOffEnum.java @@ -3,12 +3,13 @@ package com.engine.salary.enums; /** - * @description: 是、否 - * @author: xiajun - * @modified By: xiajun - * @date: Created in 10/28/21 5:50 PM - * @version:v1.0 - */ + * 开关枚举 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public enum SalaryOnOffEnum implements BaseEnum { ON(1, "是", 84967), @@ -40,4 +41,13 @@ public enum SalaryOnOffEnum implements BaseEnum { public Integer getLabelId() { return labelId; } + + public static SalaryOnOffEnum parseByValue(int value) { + for (SalaryOnOffEnum item : values()) { + if (item.getValue().equals(value)) { + return item; + } + } + return OFF; + } } diff --git a/src/com/engine/salary/enums/SalaryRoundingModeEnum.java b/src/com/engine/salary/enums/SalaryRoundingModeEnum.java index 288aa7b07..702b921e4 100644 --- a/src/com/engine/salary/enums/SalaryRoundingModeEnum.java +++ b/src/com/engine/salary/enums/SalaryRoundingModeEnum.java @@ -67,6 +67,6 @@ public enum SalaryRoundingModeEnum implements BaseEnum { return modeEnum; } } - return null; + return ROUNDING; } } diff --git a/src/com/engine/salary/enums/SalaryValueTypeEnum.java b/src/com/engine/salary/enums/SalaryValueTypeEnum.java index 7d82d47d1..77bf5e71f 100644 --- a/src/com/engine/salary/enums/SalaryValueTypeEnum.java +++ b/src/com/engine/salary/enums/SalaryValueTypeEnum.java @@ -51,7 +51,7 @@ public enum SalaryValueTypeEnum implements BaseEnum { return salaryValueTypeEnum; } } - return null; + return INPUT; } @@ -65,6 +65,6 @@ public enum SalaryValueTypeEnum implements BaseEnum { return enumAry[i].getDefaultLabel(); } } - return ""; + return INPUT.getDefaultLabel(); } } diff --git a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java index fd85bbf52..ddb8054f3 100644 --- a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java +++ b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java @@ -1,6 +1,6 @@ package com.engine.salary.mapper.salaryitem; -import com.engine.salary.entity.salaryitem.dto.SalaryItemConfig; +import com.engine.salary.entity.salaryitem.config.SalaryItemConfig; import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import org.apache.ibatis.annotations.Param; diff --git a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml index 6a8733468..966955eb4 100644 --- a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml +++ b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml @@ -604,6 +604,7 @@ + @@ -615,6 +616,7 @@ + @@ -628,7 +630,8 @@ - item.name as item_name + item.id as item_id + ,item.name as item_name , item.code as item_code , item.system_type as item_system_type , item.sys_salary_item_id as item_sys_salary_item_id @@ -652,6 +655,7 @@ + , formula.id as formula_id , formula.name as formula_name , formula.description as formula_description , formula.module as formula_module @@ -665,6 +669,7 @@ + , var.id as var_id , var.name as var_name , var.formula_id as var_formula_id , var.field_id as var_field_id @@ -684,6 +689,15 @@ left join hrsa_formula formula on item.formula_id = formula.id left join hrsa_formula_var var on var.formula_id = formula.id where item.delete_type=0 and formula.delete_type=0 and var.delete_type=0 + and item.use_in_employee_salary = 0 + and system_type = 0 + + + AND id IN + + #{id} + + diff --git a/src/com/engine/salary/service/SalaryItemService.java b/src/com/engine/salary/service/SalaryItemService.java index c5b2a35ae..cf15b101d 100644 --- a/src/com/engine/salary/service/SalaryItemService.java +++ b/src/com/engine/salary/service/SalaryItemService.java @@ -1,6 +1,6 @@ package com.engine.salary.service; -import com.engine.salary.entity.salaryitem.dto.SalaryItemConfig; +import com.engine.salary.entity.salaryitem.config.SalaryItemConfig; import com.engine.salary.entity.salaryitem.param.SalaryItemExportParam; import com.engine.salary.entity.salaryitem.param.SalaryItemSaveParam; import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index ce1a641dc..7ca53abcc 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -11,7 +11,7 @@ import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.entity.salaryformula.po.FormulaPO; import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.entity.salaryitem.bo.SalaryItemBO; -import com.engine.salary.entity.salaryitem.dto.SalaryItemConfig; +import com.engine.salary.entity.salaryitem.config.SalaryItemConfig; import com.engine.salary.entity.salaryitem.param.SalaryItemExportParam; import com.engine.salary.entity.salaryitem.param.SalaryItemSaveParam; import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; diff --git a/src/com/engine/salary/web/SalaryItemController.java b/src/com/engine/salary/web/SalaryItemController.java index aea4c47f5..755c52360 100644 --- a/src/com/engine/salary/web/SalaryItemController.java +++ b/src/com/engine/salary/web/SalaryItemController.java @@ -2,7 +2,7 @@ package com.engine.salary.web; import com.engine.common.util.ServiceUtil; import com.engine.salary.component.WeaFormOption; -import com.engine.salary.entity.salaryitem.dto.SalaryItemConfig; +import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportHandleParam; import com.engine.salary.entity.salaryitem.dto.SalaryItemFormDTO; import com.engine.salary.entity.salaryitem.dto.SalaryItemListDTO; import com.engine.salary.entity.salaryitem.dto.SysSalaryItemListDTO; @@ -15,6 +15,7 @@ import com.engine.salary.wrapper.SalaryItemWrapper; import com.engine.salary.wrapper.SysSalaryItemWrapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; import org.apache.commons.collections4.CollectionUtils; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; @@ -23,6 +24,11 @@ import javax.servlet.http.HttpServletResponse; import javax.ws.rs.*; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.StreamingOutput; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.time.LocalDate; import java.util.Collection; import java.util.List; import java.util.Map; @@ -184,10 +190,35 @@ public class SalaryItemController { @POST @Path("/export") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response export(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryItemExportParam param) { + try { + User user = HrmUserVarify.getUser(request, response); + XSSFWorkbook workbook = getSalaryItemWrapper(user).export(param); + String time = LocalDate.now().toString(); + String fileName = "薪资项目" + time; + try { + fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + StreamingOutput output = outputStream -> { + workbook.write(outputStream); + outputStream.flush(); + }; + response.setContentType("application/octet-stream"); + return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); + } catch (Exception e) { + throw e; + } + } + + @POST + @Path("/import") @Produces(MediaType.APPLICATION_JSON) - public String updateSalaryItem(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryItemExportParam param) { + public String importSalaryItem(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryItemImportParam importParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>(user).run(getSalaryItemWrapper(user)::export, param); + return new ResponseResult>(user).run(getSalaryItemWrapper(user)::importSalaryItem, importParam); } /**********************************自定义薪资项目 end*********************************/ diff --git a/src/com/engine/salary/wrapper/SalaryItemWrapper.java b/src/com/engine/salary/wrapper/SalaryItemWrapper.java index 5660c58de..6a77fbc89 100644 --- a/src/com/engine/salary/wrapper/SalaryItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryItemWrapper.java @@ -2,19 +2,17 @@ package com.engine.salary.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.component.WeaFormOption; import com.engine.salary.config.SalaryElogConfig; -import com.engine.hrmelog.entity.dto.LoggerContext; +import com.engine.salary.entity.datacollection.dto.AddUpDeductionDTO; import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryitem.bo.SalaryItemBO; import com.engine.salary.entity.salaryitem.bo.SysSalaryItemBO; -import com.engine.salary.entity.salaryitem.dto.SalaryItemConfig; +import com.engine.salary.entity.salaryitem.config.SalaryItemConfig; import com.engine.salary.entity.salaryitem.dto.SalaryItemFormDTO; import com.engine.salary.entity.salaryitem.dto.SalaryItemListDTO; -import com.engine.salary.entity.salaryitem.param.SalaryItemExportParam; -import com.engine.salary.entity.salaryitem.param.SalaryItemSaveParam; -import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; -import com.engine.salary.entity.salaryitem.param.SyncSalaryItemParam; +import com.engine.salary.entity.salaryitem.param.*; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salaryitem.po.SysSalaryItemPO; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; @@ -28,14 +26,19 @@ 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.ExcelParseHelper; +import com.engine.salary.util.excel.ExcelUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.valid.RuntimeTypeEnum; import com.engine.salary.util.valid.ValidUtil; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.math.NumberUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import weaver.file.ImageFileManager; import weaver.hrm.User; +import java.io.InputStream; import java.util.*; /** @@ -292,6 +295,7 @@ public class SalaryItemWrapper extends Service { /** * 获取薪资项目在哪些账套中使用 + * * @param salaryItemId */ public List> getSalarySobBySalaryItem(Long salaryItemId) { @@ -300,17 +304,45 @@ public class SalaryItemWrapper extends Service { /** * 将薪资项目管理中的信息同步至账套 + * * @param syncSalaryItemParam */ public void syncSalaryItemToSalarySobItem(SyncSalaryItemParam syncSalaryItemParam) { getSalaryItemService(user).syncSalaryItemToSalarySobItem(syncSalaryItemParam); } - public List export(SalaryItemExportParam param) { + public XSSFWorkbook export(SalaryItemExportParam param) { - return getSalaryItemService(user).getConfig(param); + String[] titles = {"名称", "默认使用", "核算时隐藏", "进位规则", "保留的小数位数", "取值方式", "字段类型", "公式", "备注", "排序", "宽度", "默认值"}; + List configs = getSalaryItemService(user).getConfig(param); + List> rows = new ArrayList<>(); + rows.add(Arrays.asList(titles)); + configs.forEach(e -> { + List row = new ArrayList<>(); + row.add(e.getName()); + row.add(SalaryOnOffEnum.parseByValue(e.getUseDefault()).getDefaultLabel()); + row.add(e.getHideDefault()); + row.add(SalaryRoundingModeEnum.parseByValue(e.getRoundingMode()).getDefaultLabel()); + row.add(e.getPattern()); + row.add(SalaryValueTypeEnum.parseByValue(e.getValueType()).getDefaultLabel()); + row.add(e.getDataType()); + row.add("e.getFormula()"); + row.add(e.getDescription()); + row.add(e.getSortedIndex()); + row.add(e.getWidth()); + row.add(e.getDefaultValue()); + rows.add(row); + }); + + return ExcelUtil.genWorkbookV2(rows, "薪资项目"); + } + + public void importSalaryItem(SalaryItemImportParam param) { + InputStream fileInputStream = null; + fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); + List addUpDeductions = ExcelParseHelper.parse2Map(fileInputStream, AddUpDeductionDTO.class, 0, 1, 14, "addUpDeductionTemplate.xlsx"); } } From dd18cf51912f1b75d3c9062d5ee65f54596e08f7 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 6 Aug 2024 16:54:19 +0800 Subject: [PATCH 011/124] =?UTF-8?q?=E8=80=83=E5=8B=A4=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E5=A4=9A=E4=B8=AA=E8=B4=A6=E5=A5=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../param/AttendQuoteCheckOperationParam.java | 3 +- .../param/AttendQuoteDataSyncParam.java | 6 +- .../salary/service/AttendQuoteService.java | 5 +- .../impl/AttendQuoteDataServiceImpl.java | 130 ++++++++++-------- .../service/impl/AttendQuoteServiceImpl.java | 4 +- .../salary/timer/AutoSyncAttendQuoteJob.java | 5 +- .../salary/wrapper/AttendQuoteWrapper.java | 2 +- 7 files changed, 84 insertions(+), 71 deletions(-) diff --git a/src/com/engine/salary/entity/datacollection/param/AttendQuoteCheckOperationParam.java b/src/com/engine/salary/entity/datacollection/param/AttendQuoteCheckOperationParam.java index 932f04064..c5d99339b 100644 --- a/src/com/engine/salary/entity/datacollection/param/AttendQuoteCheckOperationParam.java +++ b/src/com/engine/salary/entity/datacollection/param/AttendQuoteCheckOperationParam.java @@ -7,6 +7,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.time.YearMonth; +import java.util.List; /** * 考勤引用是否可以操作参数 @@ -30,5 +31,5 @@ public class AttendQuoteCheckOperationParam { //关联账套id @DataCheck(require = true, message = "关联账套id必传") - private Long salarySobId; + private List salarySobIds; } diff --git a/src/com/engine/salary/entity/datacollection/param/AttendQuoteDataSyncParam.java b/src/com/engine/salary/entity/datacollection/param/AttendQuoteDataSyncParam.java index 3cb9020df..cfe868557 100644 --- a/src/com/engine/salary/entity/datacollection/param/AttendQuoteDataSyncParam.java +++ b/src/com/engine/salary/entity/datacollection/param/AttendQuoteDataSyncParam.java @@ -6,9 +6,11 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import java.util.Collection; +import java.util.List; /** * 数据采集-考勤引用数据同步参数 @@ -28,7 +30,7 @@ public class AttendQuoteDataSyncParam { private String salaryYearMonth; //关联账套id - private Long salarySobId; + private List salarySobIds; //账套外人员主键id private Collection employeeIds; @@ -43,7 +45,7 @@ public class AttendQuoteDataSyncParam { if (StringUtils.isEmpty(saveParam.getSalaryYearMonth())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100294, "薪资所属月必传")); } - if (saveParam.getSalarySobId() == null) { + if (CollectionUtils.isEmpty(saveParam.getSalarySobIds())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100295, "薪资账套必传")); } } diff --git a/src/com/engine/salary/service/AttendQuoteService.java b/src/com/engine/salary/service/AttendQuoteService.java index d871b026c..0e57a4513 100644 --- a/src/com/engine/salary/service/AttendQuoteService.java +++ b/src/com/engine/salary/service/AttendQuoteService.java @@ -7,6 +7,7 @@ import com.engine.salary.util.page.PageInfo; import java.time.YearMonth; import java.util.Collection; +import java.util.List; public interface AttendQuoteService { @@ -31,10 +32,10 @@ public interface AttendQuoteService { * 检查是否可以操作 * * @param salaryYearMonth - * @param salarySobId + * @param salarySobIds * @return */ - Boolean checkOperation(YearMonth salaryYearMonth, Long salarySobId); + Boolean checkOperation(YearMonth salaryYearMonth, List salarySobIds); AttendQuotePO getById(Long id); diff --git a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java index 0b95a4a1d..1771b6c09 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java @@ -334,7 +334,7 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa @Override public String syncAttendQuoteData(AttendQuoteDataSyncParam syncParam) { AttendQuoteDataSyncParam.checkParam(syncParam); - Long salarySobId = syncParam.getSalarySobId(); + List salarySobIds = syncParam.getSalarySobIds(); String salaryYearMonth = syncParam.getSalaryYearMonth(); int year = Integer.parseInt(salaryYearMonth.split("-")[0]); int month = Integer.parseInt(salaryYearMonth.split("-")[1]); @@ -348,77 +348,85 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100366, "请先设置同步字段")); } - // 获取薪资账套 - SalarySobCycleDTO salarySobCycleDTO = getSalarySobService(user).getSalarySobCycle(syncParam.getSalarySobId(), YearMonth.of(year, month)); + String errorMsg = ""; + for (Long salarySobId : salarySobIds) { + // 获取薪资账套 + SalarySobCycleDTO salarySobCycleDTO = getSalarySobService(user).getSalarySobCycle(salarySobId, YearMonth.of(year, month)); + SalarySobPO salarySobPO = getSalarySobService(user).getById(salarySobId); - // 根据薪资账套查询人员 - List salaryEmployees = getSalaryEmployeeService(user).listBySalarySobId(salarySobId); - if (CollectionUtils.isEmpty(salaryEmployees)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100367, "薪资账套没有人员")); - } - // 根据薪资账套查询薪资周期 - SalarySobPO salarySobPO = getSalarySobService(user).getById(salarySobId); - Long taxAgentId = salarySobPO.getTaxAgentId(); + // 根据薪资账套查询人员 + List salaryEmployees = getSalaryEmployeeService(user).listBySalarySobId(salarySobId); + if (CollectionUtils.isEmpty(salaryEmployees)) { + errorMsg = errorMsg + "【" + salarySobPO.getName() + "】薪资账套没有人员; "; + } else { + // 根据薪资账套查询薪资周期 + Long taxAgentId = salarySobPO.getTaxAgentId(); - // 查询薪资档案,获取人员的个税扣缴义务人 - List employeeIds = SalaryEntityUtil.properties(salaryEmployees, DataCollectionEmployee::getEmployeeId, Collectors.toList()); - List salaryArchiveDataDTOS = getSalaryArchiveService(user).getSalaryArchiveTaxAgentData(salarySobCycleDTO.getSalaryCycle(), employeeIds, taxAgentId); - // 转换成薪资核算人员po - Date salaryDate = SalaryDateUtil.dateStrToLocalTime(salaryYearMonth + "-01"); - List salaryAcctEmployeePOS = SalaryAcctEmployeeBO.convert2Employee(salaryEmployees, SalaryAcctRecordPO.builder().salarySobId(salarySobId).salaryMonth(salaryDate).build(), salaryArchiveDataDTOS, (long) user.getUID()); + // 查询薪资档案,获取人员的个税扣缴义务人 + List employeeIds = SalaryEntityUtil.properties(salaryEmployees, DataCollectionEmployee::getEmployeeId, Collectors.toList()); + List salaryArchiveDataDTOS = getSalaryArchiveService(user).getSalaryArchiveTaxAgentData(salarySobCycleDTO.getSalaryCycle(), employeeIds, taxAgentId); + // 转换成薪资核算人员po + Date salaryDate = SalaryDateUtil.dateStrToLocalTime(salaryYearMonth + "-01"); + List salaryAcctEmployeePOS = SalaryAcctEmployeeBO.convert2Employee(salaryEmployees, SalaryAcctRecordPO.builder().salarySobId(salarySobId).salaryMonth(salaryDate).build(), salaryArchiveDataDTOS, (long) user.getUID()); - //过滤掉不属于当前账套扣缴义务人的人员 - employeeIds = salaryAcctEmployeePOS.stream().filter(po -> Objects.equals(taxAgentId, po.getTaxAgentId())).map(SalaryAcctEmployeePO::getEmployeeId).collect(Collectors.toList()); + //过滤掉不属于当前账套扣缴义务人的人员 + employeeIds = salaryAcctEmployeePOS.stream().filter(po -> Objects.equals(taxAgentId, po.getTaxAgentId())).map(SalaryAcctEmployeePO::getEmployeeId).collect(Collectors.toList()); - // 4.获取考勤模块数据 - List> attendQuoteSyncData = getAttendQuoteDataFromRemoteAttend(salarySobCycleDTO.getAttendCycle(), employeeIds, attendQuoteFields); - List pos = new ArrayList<>(); - List values = new ArrayList<>(); - // 5.考勤引用数据处理 - Date now = new Date(); - if (CollectionUtils.isNotEmpty(attendQuoteSyncData)) { + // 4.获取考勤模块数据 + List> attendQuoteSyncData = getAttendQuoteDataFromRemoteAttend(salarySobCycleDTO.getAttendCycle(), employeeIds, attendQuoteFields); + List pos = new ArrayList<>(); + List values = new ArrayList<>(); + // 5.考勤引用数据处理 + Date now = new Date(); + if (CollectionUtils.isNotEmpty(attendQuoteSyncData)) { - // 3.生成考勤引用 - AttendQuotePO attendQuote = getAttendQuote(AttendQuoteSourceTypeEnum.QUOTE, salarySobId, year, month, syncParam.getDescription()); + // 3.生成考勤引用 + AttendQuotePO attendQuote = getAttendQuote(AttendQuoteSourceTypeEnum.QUOTE, salarySobId, year, month, syncParam.getDescription()); - for (Long employeeId : employeeIds) { - AttendQuoteDataPO po = new AttendQuoteDataPO(); - po.setId(IdGenerator.generate()); - po.setCreateTime(now); - po.setUpdateTime(now); - po.setCreator((long) user.getUID()); - po.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); - // 考勤引用表的主键id - po.setAttendQuoteId(attendQuote.getId()); - po.setEmployeeId(employeeId); - pos.add(po); - for (Map attendQuoteData : attendQuoteSyncData) { - if (!Objects.isNull(attendQuoteData.get("employeeId")) && - !Objects.isNull(employeeId) && - !Objects.isNull(attendQuoteData.get("attendQuoteFieldId")) && - attendQuoteData.get("employeeId").toString().equals(employeeId.toString())) { - values.add(AttendQuoteDataValuePO.builder() - .createTime(now) - .updateTime(now) - .creator((long) user.getUID()) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .employeeId(employeeId) - .attendQuoteId(attendQuote.getId()) - .attendQuoteDataId(po.getId()) - .attendQuoteFieldId(Long.valueOf(attendQuoteData.get("attendQuoteFieldId").toString())) - .dataValue(Utils.null2String(attendQuoteData.get("dataValue"))) - .build()); + for (Long employeeId : employeeIds) { + AttendQuoteDataPO po = new AttendQuoteDataPO(); + po.setId(IdGenerator.generate()); + po.setCreateTime(now); + po.setUpdateTime(now); + po.setCreator((long) user.getUID()); + po.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); + // 考勤引用表的主键id + po.setAttendQuoteId(attendQuote.getId()); + po.setEmployeeId(employeeId); + pos.add(po); + for (Map attendQuoteData : attendQuoteSyncData) { + if (!Objects.isNull(attendQuoteData.get("employeeId")) && + !Objects.isNull(employeeId) && + !Objects.isNull(attendQuoteData.get("attendQuoteFieldId")) && + attendQuoteData.get("employeeId").toString().equals(employeeId.toString())) { + values.add(AttendQuoteDataValuePO.builder() + .createTime(now) + .updateTime(now) + .creator((long) user.getUID()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .employeeId(employeeId) + .attendQuoteId(attendQuote.getId()) + .attendQuoteDataId(po.getId()) + .attendQuoteFieldId(Long.valueOf(attendQuoteData.get("attendQuoteFieldId").toString())) + .dataValue(Utils.null2String(attendQuoteData.get("dataValue"))) + .build()); + } + } } + + // 6.数据落库处理 + handleDataToDB(attendQuote.getId(), pos, values); + // 记录日志 + recordLog(attendQuote); + } else { + errorMsg = errorMsg + "【" + salarySobPO.getName() + "】" + "暂无考勤数据可以同步; "; } } + } - // 6.数据落库处理 - handleDataToDB(attendQuote.getId(), pos, values); - // 记录日志 - recordLog(attendQuote); - } else { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100368, "暂无考勤数据可以同步")); + if (StringUtils.isNotBlank(errorMsg)) { + throw new SalaryRunTimeException(errorMsg); } return null; } diff --git a/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java index f6e5f62e0..b61987dde 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java @@ -151,9 +151,9 @@ public class AttendQuoteServiceImpl extends Service implements AttendQuoteServic @Override - public Boolean checkOperation(YearMonth salaryYearMonth, Long salarySobId) { + public Boolean checkOperation(YearMonth salaryYearMonth, List salarySobIds) { // 已经核算过的不可操作 - List salaryAcctRecords = getSalaryAcctRecordService(user).listBySalarySobIds(Collections.singletonList(salarySobId)); + List salaryAcctRecords = getSalaryAcctRecordService(user).listBySalarySobIds(salarySobIds); AtomicReference isEnableOperation = new AtomicReference<>(Boolean.TRUE); salaryAcctRecords.forEach(e -> { boolean isAccounted = e.getSalaryMonth().equals(SalaryDateUtil.localDateToDate(LocalDate.of(salaryYearMonth.getYear(), salaryYearMonth.getMonth(), 1))) diff --git a/src/com/engine/salary/timer/AutoSyncAttendQuoteJob.java b/src/com/engine/salary/timer/AutoSyncAttendQuoteJob.java index 78baf3e7d..085c8ff29 100644 --- a/src/com/engine/salary/timer/AutoSyncAttendQuoteJob.java +++ b/src/com/engine/salary/timer/AutoSyncAttendQuoteJob.java @@ -15,6 +15,7 @@ import weaver.hrm.User; import weaver.interfaces.schedule.BaseCronJob; import java.time.LocalDate; +import java.util.Collections; import java.util.Date; import java.util.List; @@ -60,7 +61,7 @@ public class AutoSyncAttendQuoteJob extends BaseCronJob { salarySobList.stream().forEach(sob -> { // 校验是否可以操作 Boolean canSync = getAttendQuoteWrapper(tempUser).checkOperation(AttendQuoteCheckOperationParam.builder() - .salarySobId(sob.getId()) + .salarySobIds(Collections.singletonList(sob.getId())) .salaryYearMonthStr(dateStr) .build()); if (canSync) { @@ -68,7 +69,7 @@ public class AutoSyncAttendQuoteJob extends BaseCronJob { try { baseBean.writeLog("自动同步考勤数据开始:"+ sob.getId()+","+dateStr); getAttendQuoteDataWrapper(tempUser).syncAttendQuoteData(AttendQuoteDataSyncParam.builder() - .salarySobId(sob.getId()) + .salarySobIds(Collections.singletonList(sob.getId())) .salaryYearMonth(dateStr) .build()); baseBean.writeLog("自动同步考勤数据结束:"+ sob.getId()+","+dateStr); diff --git a/src/com/engine/salary/wrapper/AttendQuoteWrapper.java b/src/com/engine/salary/wrapper/AttendQuoteWrapper.java index ec232baaf..d0baa414f 100644 --- a/src/com/engine/salary/wrapper/AttendQuoteWrapper.java +++ b/src/com/engine/salary/wrapper/AttendQuoteWrapper.java @@ -107,7 +107,7 @@ public class AttendQuoteWrapper extends Service { String salaryYearMonthStr = checkOperationParam.getSalaryYearMonthStr(); YearMonth yearMonth = SalaryDateUtil.String2YearMonth(salaryYearMonthStr); checkOperationParam.setSalaryYearMonth(yearMonth); - return getAttendQuoteService(user).checkOperation(checkOperationParam.getSalaryYearMonth(), checkOperationParam.getSalarySobId()); + return getAttendQuoteService(user).checkOperation(checkOperationParam.getSalaryYearMonth(), checkOperationParam.getSalarySobIds()); } /** From 48120f8e248abaefd91f256a13cb1f63cf3e8bd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 7 Aug 2024 09:06:09 +0800 Subject: [PATCH 012/124] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E8=96=AA=E8=B5=84?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/SalaryItemExcelConfig.java | 114 ++++++++++++++ .../engine/salary/enums/SalaryOnOffEnum.java | 9 ++ .../salary/enums/SalaryRoundingModeEnum.java | 9 ++ .../salary/enums/SalaryValueTypeEnum.java | 9 ++ .../enums/salaryitem/SalaryDataTypeEnum.java | 2 +- .../mapper/salaryitem/SalaryItemMapper.java | 2 + .../mapper/salaryitem/SalaryItemMapper.xml | 47 ++++-- .../salary/service/SalaryItemService.java | 10 +- .../service/impl/SalaryItemServiceImpl.java | 143 ++++++++++++++++-- .../engine/salary/util/db/IdGenerator.java | 5 + .../engine/salary/util/excel/ExcelHead.java | 4 +- .../util/excel/ImportExcelResponse.java | 27 ++++ .../salary/web/SalaryItemController.java | 4 +- .../salary/wrapper/SalaryItemWrapper.java | 30 ++-- 14 files changed, 372 insertions(+), 43 deletions(-) create mode 100644 src/com/engine/salary/entity/salaryitem/config/SalaryItemExcelConfig.java create mode 100644 src/com/engine/salary/util/excel/ImportExcelResponse.java diff --git a/src/com/engine/salary/entity/salaryitem/config/SalaryItemExcelConfig.java b/src/com/engine/salary/entity/salaryitem/config/SalaryItemExcelConfig.java new file mode 100644 index 000000000..cd6d37c83 --- /dev/null +++ b/src/com/engine/salary/entity/salaryitem/config/SalaryItemExcelConfig.java @@ -0,0 +1,114 @@ +package com.engine.salary.entity.salaryitem.config; + +import com.engine.salary.enums.SalaryRoundingModeEnum; +import com.engine.salary.enums.SalaryValueTypeEnum; +import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; +import com.engine.salary.util.excel.ExcelHead; +import com.engine.salary.util.excel.ExcelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + + +@Data +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +public class SalaryItemExcelConfig { + + /** + * 名称 + */ + @ExcelHead(title="名称",dataIndex = "name") + @ExcelProperty(index = 0) + private String name; + + /** + * 默认使用。0:默认不适用、1:默认使用 + */ + @ExcelHead(title="是否默认使用",dataIndex = "useDefault") + @ExcelProperty(index = 1) + private String useDefault; + + /** + * 核算是否隐藏 + */ + @ExcelHead(title="核算是否隐藏",dataIndex = "hideDefault") + @ExcelProperty(index = 2) + private String hideDefault; + + /** + * 进位规则 + * + * @see SalaryRoundingModeEnum + */ + @ExcelHead(title="进位规则",dataIndex = "roundingMode") + @ExcelProperty(index = 3) + private String roundingMode; + + /** + * 保留的小数位数 + */ + @ExcelHead(title="保留的小数位数",dataIndex = "pattern") + @ExcelProperty(index = 4) + private String pattern; + + /** + * 取值方式 + * + * @see SalaryValueTypeEnum + */ + @ExcelHead(title="取值方式",dataIndex = "valueType") + @ExcelProperty(index = 5) + private String valueType; + + /** + * 字段类型 + * + * @see SalaryDataTypeEnum + */ + @ExcelHead(title="字段类型",dataIndex = "dataType") + @ExcelProperty(index = 6) + private String dataType; + + /** + * 公式 + */ + @ExcelHead(title="公式",dataIndex = "formula") + @ExcelProperty(index = 7) + private String formula; + + @ExcelHead(title="sql返回字段",dataIndex = "sqlReturnKey") + @ExcelProperty(index = 8) + private String sqlReturnKey; + + /** + * 排序 + */ + @ExcelHead(title="排序",dataIndex = "sortedIndex") + @ExcelProperty(index = 9) + private String sortedIndex; + + /** + * 宽度 + */ + @ExcelHead(title="宽度",dataIndex = "width") + @ExcelProperty(index = 10) + private String width; + + /** + * 默认值 + */ + @ExcelHead(title="默认值",dataIndex = "defaultValue") + @ExcelProperty(index = 11) + private String defaultValue; + + /** + * 备注 + */ + @ExcelHead(title="备注",dataIndex = "description") + @ExcelProperty(index = 12) + private String description; + +} diff --git a/src/com/engine/salary/enums/SalaryOnOffEnum.java b/src/com/engine/salary/enums/SalaryOnOffEnum.java index d2662bb30..99b31eb4d 100644 --- a/src/com/engine/salary/enums/SalaryOnOffEnum.java +++ b/src/com/engine/salary/enums/SalaryOnOffEnum.java @@ -50,4 +50,13 @@ public enum SalaryOnOffEnum implements BaseEnum { } return OFF; } + + public static SalaryOnOffEnum parseByDefaultLabel(String defaultLabel) { + for (SalaryOnOffEnum item : values()) { + if (item.getDefaultLabel().equals(defaultLabel)) { + return item; + } + } + return OFF; + } } diff --git a/src/com/engine/salary/enums/SalaryRoundingModeEnum.java b/src/com/engine/salary/enums/SalaryRoundingModeEnum.java index 702b921e4..a47733891 100644 --- a/src/com/engine/salary/enums/SalaryRoundingModeEnum.java +++ b/src/com/engine/salary/enums/SalaryRoundingModeEnum.java @@ -69,4 +69,13 @@ public enum SalaryRoundingModeEnum implements BaseEnum { } return ROUNDING; } + + public static SalaryRoundingModeEnum parseByDefaultLabel(String defaultLabel) { + for (SalaryRoundingModeEnum modeEnum : SalaryRoundingModeEnum.values()) { + if (Objects.equals(modeEnum.getDefaultLabel(), defaultLabel)) { + return modeEnum; + } + } + return ROUNDING; + } } diff --git a/src/com/engine/salary/enums/SalaryValueTypeEnum.java b/src/com/engine/salary/enums/SalaryValueTypeEnum.java index 77bf5e71f..3f50e75fc 100644 --- a/src/com/engine/salary/enums/SalaryValueTypeEnum.java +++ b/src/com/engine/salary/enums/SalaryValueTypeEnum.java @@ -54,6 +54,15 @@ public enum SalaryValueTypeEnum implements BaseEnum { return INPUT; } + public static SalaryValueTypeEnum parseByDefaultLabel(String defaultLabel) { + for (SalaryValueTypeEnum salaryValueTypeEnum : SalaryValueTypeEnum.values()) { + if (Objects.equals(salaryValueTypeEnum.getDefaultLabel(), defaultLabel)) { + return salaryValueTypeEnum; + } + } + return INPUT; + } + public static String getDefaultLabelByValue(Integer value) { if (value == null) { diff --git a/src/com/engine/salary/enums/salaryitem/SalaryDataTypeEnum.java b/src/com/engine/salary/enums/salaryitem/SalaryDataTypeEnum.java index 07bffd40c..b5b1a483b 100644 --- a/src/com/engine/salary/enums/salaryitem/SalaryDataTypeEnum.java +++ b/src/com/engine/salary/enums/salaryitem/SalaryDataTypeEnum.java @@ -51,7 +51,7 @@ public enum SalaryDataTypeEnum implements BaseEnum { return salaryDataTypeEnum; } } - return null; + return STRING; } public static String getDefaultLabelByValue(String value) { diff --git a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java index ddb8054f3..38e3aebfd 100644 --- a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java +++ b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java @@ -68,8 +68,10 @@ public interface SalaryItemMapper { void batchUpdateSortedIndex(@Param("collection")List salaryItemPOS); + SalaryItemPO getByName(String name); List getConfig(@Param("ids") Collection ids); + } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml index 966955eb4..4e5fc222a 100644 --- a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml +++ b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml @@ -582,6 +582,13 @@ + + @@ -651,11 +658,30 @@ , item.hide_default as item_hide_default , item.width as item_width , item.default_value as item_default_value + , f.formula_id + , f.formula_name + , f.formula_description + , f.formula_module + , f.formula_use_for + , f.formula_reference_type + , f.formula_return_type + , f.formula_validate_type + , f.formula_extend_param + , f.formula_formula + , f.formula_formulaRunScript + , f.var_id + , f.var_name + , f.var_formula_id + , f.var_field_id + , f.var_field_name + , f.var_field_type + , f.var_source + , f.var_order_index - , formula.id as formula_id + formula.id as formula_id , formula.name as formula_name , formula.description as formula_description , formula.module as formula_module @@ -682,16 +708,19 @@ + select + + from hrsa_salary_item item + where item.delete_type=0 and item.use_in_employee_salary = 1 + + AND item.id IN + + #{id} + + + + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java index 38e3aebfd..1d53a8f3c 100644 --- a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java +++ b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java @@ -72,6 +72,8 @@ public interface SalaryItemMapper { List getConfig(@Param("ids") Collection ids); + List getAllConfig(@Param("ids") Collection ids); + } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml index c7b44dfa9..30f1a6bbd 100644 --- a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml +++ b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml @@ -610,7 +610,7 @@ - + @@ -622,7 +622,7 @@ - + @@ -722,7 +722,31 @@ where item.delete_type=0 and item.use_in_employee_salary = 0 and system_type = 0 - AND id IN + AND item.id IN + + #{id} + + + + + + SELECT @@ -509,6 +508,28 @@ and name = #{name} + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/mapper/taxagent/TaxAgentMapper.java b/src/com/engine/salary/mapper/taxagent/TaxAgentMapper.java index 8a2155271..865e47591 100644 --- a/src/com/engine/salary/mapper/taxagent/TaxAgentMapper.java +++ b/src/com/engine/salary/mapper/taxagent/TaxAgentMapper.java @@ -1,5 +1,6 @@ package com.engine.salary.mapper.taxagent; +import com.engine.salary.entity.taxagent.config.TaxAgentConfig; import com.engine.salary.entity.taxagent.param.TaxAgentQueryParam; import com.engine.salary.entity.taxagent.po.TaxAgentEmployeePO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; @@ -69,4 +70,6 @@ public interface TaxAgentMapper { List listEmployee(); + List getAllConfig(); + } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/taxagent/TaxAgentMapper.xml b/src/com/engine/salary/mapper/taxagent/TaxAgentMapper.xml index b39f69b49..20d164b94 100644 --- a/src/com/engine/salary/mapper/taxagent/TaxAgentMapper.xml +++ b/src/com/engine/salary/mapper/taxagent/TaxAgentMapper.xml @@ -263,5 +263,19 @@ where e.status not in (7) + + + + + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/service/SalaryArchiveItemService.java b/src/com/engine/salary/service/SalaryArchiveItemService.java index 70f53e9d9..d640fe17a 100644 --- a/src/com/engine/salary/service/SalaryArchiveItemService.java +++ b/src/com/engine/salary/service/SalaryArchiveItemService.java @@ -1,5 +1,6 @@ package com.engine.salary.service; +import com.engine.salary.entity.salaryarchive.config.ArchiveFieldConfig; import com.engine.salary.entity.salaryarchive.dto.SalaryItemAdjustRecordListDTO; import com.engine.salary.entity.salaryarchive.param.SalaryArchiveItemSaveParam; import com.engine.salary.entity.salaryarchive.param.SalaryItemAdjustBeforeParam; @@ -156,4 +157,5 @@ public interface SalaryArchiveItemService { * @date 2022/11/14 13:38 */ String editSingleSalaryItem(SalaryArchiveItemSaveParam salaryArchiveItemSaveParam); + List getAllConfig(); } diff --git a/src/com/engine/salary/service/SalaryItemService.java b/src/com/engine/salary/service/SalaryItemService.java index 58037abe8..04c3e9257 100644 --- a/src/com/engine/salary/service/SalaryItemService.java +++ b/src/com/engine/salary/service/SalaryItemService.java @@ -153,6 +153,8 @@ public interface SalaryItemService { List getConfig(SalaryItemExportParam param); + List getAllConfig(SalaryItemExportParam param); + Map preview(SalaryItemImportParam param); ImportExcelResponse importSalaryItem(SalaryItemImportParam param); diff --git a/src/com/engine/salary/service/SalarySobService.java b/src/com/engine/salary/service/SalarySobService.java index bef31a87e..cd2689cc0 100644 --- a/src/com/engine/salary/service/SalarySobService.java +++ b/src/com/engine/salary/service/SalarySobService.java @@ -1,5 +1,6 @@ package com.engine.salary.service; +import com.engine.salary.entity.salarysob.config.SalarySobConfig; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.entity.salarysob.param.SalarySobBasicSaveParam; import com.engine.salary.entity.salarysob.param.SalarySobDisableParam; @@ -154,4 +155,6 @@ public interface SalarySobService { * @return */ List listByTaxAgentIds(Collection taxAgentIds); + + List getConfig(Long taxAgentId); } diff --git a/src/com/engine/salary/service/TaxAgentService.java b/src/com/engine/salary/service/TaxAgentService.java index bab08d143..cfe02dda0 100644 --- a/src/com/engine/salary/service/TaxAgentService.java +++ b/src/com/engine/salary/service/TaxAgentService.java @@ -1,5 +1,6 @@ package com.engine.salary.service; +import com.engine.salary.entity.taxagent.config.TaxAgentConfig; import com.engine.salary.entity.taxagent.dto.TaxAgentEmployeeDTO; import com.engine.salary.entity.taxagent.dto.TaxAgentEmployeeTaxAgentDTO; import com.engine.salary.entity.taxagent.dto.TaxAgentListDTO; @@ -258,4 +259,5 @@ public interface TaxAgentService { * @return */ Collection listEmployeeIdsInTaxAgent(Long taxAgentId); + List getAllConfig(); } diff --git a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java index 19c39e199..5144ccdf8 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java @@ -8,6 +8,7 @@ import com.engine.salary.biz.SalaryItemBiz; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.salaryarchive.config.ArchiveFieldConfig; import com.engine.salary.entity.salaryarchive.dto.SalaryItemAdjustRecordListDTO; import com.engine.salary.entity.salaryarchive.param.*; import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO; @@ -20,6 +21,7 @@ import com.engine.salary.enums.salaryarchive.SalaryArchiveFieldTypeEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveItemAdjustReasonEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.archive.SalaryArchiveItemMapper; import com.engine.salary.service.SalaryArchiveItemService; import com.engine.salary.service.SalaryArchiveService; import com.engine.salary.service.SalaryEmployeeService; @@ -27,6 +29,7 @@ import com.engine.salary.service.TaxAgentService; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.SalaryLoggerUtil; +import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.excel.ExcelUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.valid.ValidUtil; @@ -55,6 +58,11 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi private SalaryItemBiz salaryItemMapper = new SalaryItemBiz(); private SalaryArchiveItemBiz salaryArchiveItemMapper = new SalaryArchiveItemBiz(); + private SalaryArchiveItemMapper getSalaryArchiveItemMapper() { + return MapperProxyFactory.getProxy(SalaryArchiveItemMapper.class); + } + + @Override public SalaryArchiveItemPO getById(Long salaryArchiveItemId) { return salaryArchiveItemMapper.getById(salaryArchiveItemId); @@ -267,6 +275,11 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi return StringUtils.EMPTY; } + @Override + public List getAllConfig() { + return getSalaryArchiveItemMapper().getAllConfig(null); + } + /** * @return null * @description 构建薪资档案中调薪的更新PO diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index fc7828baa..6703fdc30 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -540,6 +540,11 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService return getSalaryItemMapper().getConfig(param.getIds()); } + @Override + public List getAllConfig(SalaryItemExportParam param) { + return getSalaryItemMapper().getAllConfig(param.getIds()); + } + @Override public Map preview(SalaryItemImportParam param) { InputStream fileInputStream = null; @@ -717,8 +722,8 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService row.add(SalaryRoundingModeEnum.parseByValue(e.getRoundingMode()).getDefaultLabel()); row.add(e.getPattern()); row.add(SalaryValueTypeEnum.parseByValue(e.getValueType()).getDefaultLabel()); - row.add(e.getFormula() == null ? "" : e.getFormula().getFormula()); - row.add(e.getFormula() == null ? "" : JsonUtil.parseMap(Util.null2String(e.getFormula().getExtendParam()), String.class).getOrDefault("sqlReturnKey", "")); + row.add(e.getFormulaConfig() == null ? "" : e.getFormulaConfig().getFormula()); + row.add(e.getFormulaConfig() == null ? "" : JsonUtil.parseMap(Util.null2String(e.getFormulaConfig().getExtendParam()), String.class).getOrDefault("sqlReturnKey", "")); row.add(e.getSortedIndex()); row.add(e.getWidth()); row.add(e.getDefaultValue()); @@ -750,8 +755,8 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService row.add(SalaryRoundingModeEnum.parseByValue(e.getRoundingMode()).getDefaultLabel()); row.add(e.getPattern()); row.add(SalaryValueTypeEnum.parseByValue(e.getValueType()).getDefaultLabel()); - row.add(e.getFormula() == null ? "" : e.getFormula().getFormula()); - row.add(e.getFormula() == null ? "" : JsonUtil.parseMap(Util.null2String(e.getFormula().getExtendParam()), String.class).getOrDefault("sqlReturnKey", "")); + row.add(e.getFormulaConfig() == null ? "" : e.getFormulaConfig().getFormula()); + row.add(e.getFormulaConfig() == null ? "" : JsonUtil.parseMap(Util.null2String(e.getFormulaConfig().getExtendParam()), String.class).getOrDefault("sqlReturnKey", "")); row.add(e.getSortedIndex()); row.add(e.getWidth()); row.add(e.getDefaultValue()); diff --git a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java index 28dcef63a..6fb14f13f 100644 --- a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java @@ -12,6 +12,7 @@ import com.engine.salary.entity.salaryitem.bo.SysSalaryItemBO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salaryitem.po.SysSalaryItemPO; import com.engine.salary.entity.salarysob.bo.*; +import com.engine.salary.entity.salarysob.config.SalarySobConfig; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.entity.salarysob.param.*; import com.engine.salary.entity.salarysob.po.*; @@ -784,6 +785,11 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { return getSalarySobMapper().listSome(SalarySobPO.builder().taxAgentIds(taxAgentIds).build()); } + @Override + public List getConfig(Long taxAgentId) { + return getSalarySobMapper().getConfig(taxAgentId); + } + public List filterByAdmin(List salarySobPOS) { long employeeId = user.getUID(); diff --git a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java index aa0890cb7..9c004b049 100644 --- a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java @@ -13,11 +13,13 @@ import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.datacollection.po.OtherDeductionPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; +import com.engine.salary.entity.salarysob.config.SalarySobConfig; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.siaccount.param.InsuranceAccountBatchParam; import com.engine.salary.entity.siaccount.po.InsuranceAccountBatchPO; import com.engine.salary.entity.siarchives.po.InsuranceArchivesBaseInfoPO; import com.engine.salary.entity.taxagent.bo.TaxAgentBO; +import com.engine.salary.entity.taxagent.config.TaxAgentConfig; import com.engine.salary.entity.taxagent.dto.TaxAgentEmployeeDTO; import com.engine.salary.entity.taxagent.dto.TaxAgentEmployeeTaxAgentDTO; import com.engine.salary.entity.taxagent.dto.TaxAgentListDTO; @@ -89,6 +91,11 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { } + private SalarySobService getSalarySobService(User user) { + return ServiceUtil.getService(SalarySobServiceImpl.class, user); + } + + private SalaryAcctRecordService getSalaryAcctRecordService(User user) { return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user); } @@ -797,5 +804,15 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { return SalaryEntityUtil.properties(taxAgentEmpPOS, TaxAgentEmpPO::getEmployeeId); } + @Override + public List getAllConfig() { + List allConfig = getTaxAgentMapper().getAllConfig(); + allConfig.forEach(config->{ + List sobConfigs = getSalarySobService(user).getConfig(config.getId()); + config.setSalarySobConfigs(sobConfigs); + }); + return allConfig; + } + } diff --git a/src/com/engine/salary/web/SalarySystemConfigController.java b/src/com/engine/salary/web/SalarySystemConfigController.java index ae1b52d67..636b31767 100644 --- a/src/com/engine/salary/web/SalarySystemConfigController.java +++ b/src/com/engine/salary/web/SalarySystemConfigController.java @@ -199,6 +199,7 @@ public class SalarySystemConfigController { /** * 薪资核算人员匹配规则 + * * @param request * @param response * @param param @@ -214,6 +215,7 @@ public class SalarySystemConfigController { /** * 工资单反馈 + * * @param request * @param response * @param param @@ -229,6 +231,7 @@ public class SalarySystemConfigController { /** * 撤回个税申报 + * * @param request * @param response * @param param @@ -244,6 +247,7 @@ public class SalarySystemConfigController { /** * 删除档案 + * * @param request * @param response * @param param @@ -318,4 +322,40 @@ public class SalarySystemConfigController { User user = HrmUserVarify.getUser(request, response); return new ResponseResult>(user).run(getSalarySystemConfigWrapper(user)::getEncryptProgress, progressId); } + + // @POST +// @Path("/downloadConfig") +// @Produces(MediaType.APPLICATION_OCTET_STREAM) +// public Response downloadConfig(@Context HttpServletRequest request, @Context HttpServletResponse response) { +// try { +// User user = HrmUserVarify.getUser(request, response); +// XSSFWorkbook workbook = getAddUpDeductionWrapper(user).downloadTemplate(queryParam); +// 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("/downloadConfig") + @Produces(MediaType.APPLICATION_JSON) + public String downloadConfig(@Context HttpServletRequest request, @Context HttpServletResponse response) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalarySystemConfigWrapper(user)::downloadConfig); + + } + } diff --git a/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java b/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java index 46b470aa4..5065ce298 100644 --- a/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java @@ -2,6 +2,17 @@ package com.engine.salary.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.entity.config.SalaryConfig; +import com.engine.salary.entity.salaryarchive.config.ArchiveFieldConfig; +import com.engine.salary.entity.salaryitem.config.SalaryItemConfig; +import com.engine.salary.entity.salaryitem.param.SalaryItemExportParam; +import com.engine.salary.entity.taxagent.config.TaxAgentConfig; +import com.engine.salary.service.SalaryArchiveItemService; +import com.engine.salary.service.SalaryItemService; +import com.engine.salary.service.TaxAgentService; +import com.engine.salary.service.impl.SalaryArchiveItemServiceImpl; +import com.engine.salary.service.impl.SalaryItemServiceImpl; +import com.engine.salary.service.impl.TaxAgentServiceImpl; import com.engine.salary.sys.entity.param.AppSettingSaveParam; import com.engine.salary.sys.entity.param.MatchEmployeeModeSaveParam; import com.engine.salary.sys.entity.param.OrderRuleParam; @@ -17,6 +28,7 @@ import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.util.valid.RuntimeTypeEnum; import com.engine.salary.util.valid.ValidUtil; +import com.thoughtworks.xstream.XStream; import org.apache.commons.lang3.StringUtils; import weaver.general.BaseBean; import weaver.hrm.User; @@ -39,6 +51,18 @@ public class SalarySystemConfigWrapper extends Service { return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); } + private SalaryItemService getSalaryItemService(User user) { + return ServiceUtil.getService(SalaryItemServiceImpl.class, user); + } + + private SalaryArchiveItemService getSalaryArchiveItemService(User user) { + return ServiceUtil.getService(SalaryArchiveItemServiceImpl.class, user); + } + + private TaxAgentService getTaxAgentService(User user) { + return ServiceUtil.getService(TaxAgentServiceImpl.class, user); + } + public Map info() { BaseBean baseBean = new BaseBean(); String log = baseBean.getPropValue("hrmSalary", "log"); @@ -136,12 +160,12 @@ public class SalarySystemConfigWrapper extends Service { public AppSettingVO appSetting() { - return getSalarySysConfService(user).appSetting(); + return getSalarySysConfService(user).appSetting(); } public Map saveEncryptSetting(AppSettingSaveParam param) { - return getSalarySysConfService(user).saveEncryptSetting(param); + return getSalarySysConfService(user).saveEncryptSetting(param); } public Map getEncryptProgress(String progressId) { @@ -167,4 +191,25 @@ public class SalarySystemConfigWrapper extends Service { public void saveSalarySendFeedback(SalarySysConfPO param) { getSalarySysConfService(user).saveSalarySendFeedback(param); } + + public Object downloadConfig() { + XStream xStream = new XStream(); + //由于使用的注解,将自动检测注解开启 + xStream.autodetectAnnotations(true); + + SalaryConfig salaryConfig = new SalaryConfig(); + List salaryItemConfigs = getSalaryItemService(user).getAllConfig(SalaryItemExportParam.builder().build()); + salaryConfig.setSalaryItemConfigs(salaryItemConfigs); + + List archiveFieldConfigs = getSalaryArchiveItemService(user).getAllConfig(); + salaryConfig.setArchiveFieldConfig(archiveFieldConfigs); + + List taxAgentConfigs = getTaxAgentService(user).getAllConfig(); + salaryConfig.setTaxAgentConfigs(taxAgentConfigs); + + String s = xStream.toXML(salaryConfig); + System.out.println(s); + return s; + + } } From 8611358c6c5a76f071c7f6a34c47c42244fa4d4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 8 Aug 2024 11:03:55 +0800 Subject: [PATCH 017/124] =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/SalarySystemConfigController.java | 56 ++++++++++--------- .../wrapper/SalarySystemConfigWrapper.java | 10 +++- 2 files changed, 37 insertions(+), 29 deletions(-) diff --git a/src/com/engine/salary/web/SalarySystemConfigController.java b/src/com/engine/salary/web/SalarySystemConfigController.java index 636b31767..8b00036f4 100644 --- a/src/com/engine/salary/web/SalarySystemConfigController.java +++ b/src/com/engine/salary/web/SalarySystemConfigController.java @@ -22,6 +22,7 @@ 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 java.util.Map; @Slf4j @@ -323,36 +324,37 @@ public class SalarySystemConfigController { return new ResponseResult>(user).run(getSalarySystemConfigWrapper(user)::getEncryptProgress, progressId); } - // @POST -// @Path("/downloadConfig") -// @Produces(MediaType.APPLICATION_OCTET_STREAM) -// public Response downloadConfig(@Context HttpServletRequest request, @Context HttpServletResponse response) { -// try { -// User user = HrmUserVarify.getUser(request, response); -// XSSFWorkbook workbook = getAddUpDeductionWrapper(user).downloadTemplate(queryParam); -// 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("/downloadConfig") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response downloadConfig(@Context HttpServletRequest request, @Context HttpServletResponse response) { + try { + User user = HrmUserVarify.getUser(request, response); + XSSFWorkbook workbook = getSalarySystemConfigWrapper(user).downloadConfig(queryParam); + 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("/downloadConfig1") @Produces(MediaType.APPLICATION_JSON) - public String downloadConfig(@Context HttpServletRequest request, @Context HttpServletResponse response) { + public String downloadConfig1(@Context HttpServletRequest request, @Context HttpServletResponse response) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult(user).run(getSalarySystemConfigWrapper(user)::downloadConfig); diff --git a/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java b/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java index 5065ce298..c18ba3458 100644 --- a/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java @@ -29,10 +29,12 @@ import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.util.valid.RuntimeTypeEnum; import com.engine.salary.util.valid.ValidUtil; import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.io.xml.CompactWriter; import org.apache.commons.lang3.StringUtils; import weaver.general.BaseBean; import weaver.hrm.User; +import java.io.*; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -207,8 +209,12 @@ public class SalarySystemConfigWrapper extends Service { List taxAgentConfigs = getTaxAgentService(user).getAllConfig(); salaryConfig.setTaxAgentConfigs(taxAgentConfigs); - String s = xStream.toXML(salaryConfig); - System.out.println(s); + String xml = xStream.toXML(salaryConfig); + System.out.println(xml); + Writer writer = new StringWriter(); + xStream.marshal(xml, new CompactWriter(writer)); + OutputStream output = new ByteArrayOutputStream(); + xStream.marshal(xml, new CompactWriter(new OutputStreamWriter(output))); return s; } From 83a408afa2b9bcd670657356d526b9dd46372a44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 8 Aug 2024 16:53:31 +0800 Subject: [PATCH 018/124] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/config/SalaryBillConfig.java | 14 -- .../salary/entity/config/SalaryConfig.java | 15 +- .../config/ArchiveFieldConfig.java | 168 +-------------- .../salaryformula/config/FormluaConfig.java | 27 +++ .../entity/salaryformula/po/FormulaPO.java | 33 +++ .../entity/salaryformula/po/FormulaVar.java | 29 +++ .../config/SalaryItemAllConfig.java | 23 ++ .../entity/salaryitem/po/SalaryItemPO.java | 55 +++++ .../salarysob/config/SalarySobConfig.java | 98 ++------- .../salarysob/po/SalarySobAdjustRulePO.java | 25 +++ .../salarysob/po/SalarySobBackItemPO.java | 45 +++- .../salarysob/po/SalarySobEmpFieldPO.java | 23 ++ .../salarysob/po/SalarySobItemGroupPO.java | 31 ++- .../entity/salarysob/po/SalarySobItemPO.java | 98 ++++++--- .../entity/salarysob/po/SalarySobPO.java | 37 ++++ .../archive/SalaryArchiveItemMapper.java | 3 - .../archive/SalaryArchiveItemMapper.xml | 16 -- .../mapper/salarysob/SalarySobMapper.java | 2 - .../mapper/salarysob/SalarySobMapper.xml | 22 -- .../service/SalaryArchiveItemService.java | 4 +- .../salary/service/SalaryFormulaService.java | 3 + .../salary/service/SalaryItemService.java | 3 + .../salary/service/SalarySobItemService.java | 2 + .../salary/service/TaxAgentService.java | 2 + .../impl/SalaryArchiveItemServiceImpl.java | 21 +- .../impl/SalaryFormulaServiceImpl.java | 7 + .../service/impl/SalaryItemServiceImpl.java | 10 +- .../impl/SalarySobItemServiceImpl.java | 4 + .../service/impl/SalarySobServiceImpl.java | 119 +++++++---- .../sys/entity/param/uploadConfigParam.java | 25 +++ .../engine/salary/util/xml/XStreamUtil.java | 68 ++++++ .../web/SalarySystemConfigController.java | 46 ++-- .../wrapper/SalarySystemConfigWrapper.java | 200 ++++++++++++++++-- 33 files changed, 847 insertions(+), 431 deletions(-) delete mode 100644 src/com/engine/salary/entity/config/SalaryBillConfig.java create mode 100644 src/com/engine/salary/entity/salaryformula/config/FormluaConfig.java create mode 100644 src/com/engine/salary/entity/salaryitem/config/SalaryItemAllConfig.java create mode 100644 src/com/engine/salary/sys/entity/param/uploadConfigParam.java create mode 100644 src/com/engine/salary/util/xml/XStreamUtil.java diff --git a/src/com/engine/salary/entity/config/SalaryBillConfig.java b/src/com/engine/salary/entity/config/SalaryBillConfig.java deleted file mode 100644 index 688ef4e7d..000000000 --- a/src/com/engine/salary/entity/config/SalaryBillConfig.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.engine.salary.entity.config; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class SalaryBillConfig { - private Long id; -} diff --git a/src/com/engine/salary/entity/config/SalaryConfig.java b/src/com/engine/salary/entity/config/SalaryConfig.java index f15811d2d..8958b03f9 100644 --- a/src/com/engine/salary/entity/config/SalaryConfig.java +++ b/src/com/engine/salary/entity/config/SalaryConfig.java @@ -1,7 +1,8 @@ package com.engine.salary.entity.config; import com.engine.salary.entity.salaryarchive.config.ArchiveFieldConfig; -import com.engine.salary.entity.salaryitem.config.SalaryItemConfig; +import com.engine.salary.entity.salaryformula.config.FormluaConfig; +import com.engine.salary.entity.salaryitem.config.SalaryItemAllConfig; import com.engine.salary.entity.taxagent.config.TaxAgentConfig; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamImplicit; @@ -29,13 +30,17 @@ public class SalaryConfig { //社保方案 + //公式配置 + @XStreamAlias("FormluaConfig") + private FormluaConfig formluaConfig; + //薪资项目 - @XStreamImplicit - private List salaryItemConfigs; + @XStreamAlias("SalaryItemConfig") + private SalaryItemAllConfig salaryItemConfig; //字段管理 - @XStreamImplicit - private List archiveFieldConfig; + @XStreamAlias("ArchiveFieldConfig") + private ArchiveFieldConfig archiveFieldConfigs; //扣缴义务人 @XStreamImplicit diff --git a/src/com/engine/salary/entity/salaryarchive/config/ArchiveFieldConfig.java b/src/com/engine/salary/entity/salaryarchive/config/ArchiveFieldConfig.java index 1e77b158b..bd4a1568a 100644 --- a/src/com/engine/salary/entity/salaryarchive/config/ArchiveFieldConfig.java +++ b/src/com/engine/salary/entity/salaryarchive/config/ArchiveFieldConfig.java @@ -1,176 +1,24 @@ package com.engine.salary.entity.salaryarchive.config; -import com.engine.salary.enums.SalaryRoundingModeEnum; -import com.engine.salary.enums.SalarySystemTypeEnum; -import com.engine.salary.enums.SalaryValueTypeEnum; -import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; +import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.thoughtworks.xstream.annotations.XStreamAlias; -import com.thoughtworks.xstream.annotations.XStreamAsAttribute; +import com.thoughtworks.xstream.annotations.XStreamImplicit; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; + +import java.util.List; @Data -@Accessors(chain = true) +@Builder @NoArgsConstructor @AllArgsConstructor @XStreamAlias("ArchiveFieldConfig") public class ArchiveFieldConfig { - /** - * 主键id - */ - @XStreamAlias("id") - @XStreamAsAttribute - private Long id; - /** - * 名称 - */ - @XStreamAlias("name") - @XStreamAsAttribute - private String name; - - /** - * 编号 - */ - @XStreamAlias("code") - @XStreamAsAttribute - private String code; - - /** - * 是否是系统项目 - * - * @see SalarySystemTypeEnum - */ - @XStreamAlias("systemType") - @XStreamAsAttribute - private Integer systemType; - - /** - * 系统薪资项目的id(是从哪个系统薪资项目复制过来的) - */ - @XStreamAlias("sysSalaryItemId") - @XStreamAsAttribute - private Long sysSalaryItemId; - - /** - * 默认使用。0:默认不适用、1:默认使用 - */ - @XStreamAlias("useDefault") - @XStreamAsAttribute - private Integer useDefault; - - /** - * 薪资档案引用。0:薪资档案未引用、1:薪资档案引用 - */ - @XStreamAlias("useInEmployeeSalary") - @XStreamAsAttribute - private Integer useInEmployeeSalary; - - /** - * 核算时隐藏 - */ - @XStreamAlias("hideDefault") - @XStreamAsAttribute - private Integer hideDefault; - - /** - * 进位规则 - * - * @see SalaryRoundingModeEnum - */ - @XStreamAlias("roundingMode") - @XStreamAsAttribute - private Integer roundingMode; - - /** - * 保留的小数位数 - */ - @XStreamAlias("pattern") - @XStreamAsAttribute - private Integer pattern; - - /** - * 取值方式 - * - * @see SalaryValueTypeEnum - */ - @XStreamAlias("valueType") - @XStreamAsAttribute - private Integer valueType; - - /** - * 字段类型 - * - * @see SalaryDataTypeEnum - */ - @XStreamAlias("dataType") - @XStreamAsAttribute - private String dataType; - - /** - * 公式 - */ - @XStreamAlias("formulaId") - @XStreamAsAttribute - private Long formulaId; - - /** - * 备注 - */ - @XStreamAlias("description") - @XStreamAsAttribute - private String description; - - /** - * 是否可以编辑。0:不可编辑、1:可编辑 - */ - @XStreamAlias("canEdit") - @XStreamAsAttribute - private Integer canEdit; - - /** - * 可见性 - */ - @XStreamAlias("sharedType") - @XStreamAsAttribute - private Integer sharedType; - - /** - * 可见范围 - */ - @XStreamAlias("taxAgentIds") - @XStreamAsAttribute - private String taxAgentIds; - - /** - * 0不可删除,1可删除 - */ - @XStreamAlias("canDelete") - @XStreamAsAttribute - private Integer canDelete; - - /** - * 排序 - */ - @XStreamAlias("sortedIndex") - @XStreamAsAttribute - private Integer sortedIndex; - - /** - * 宽度 - */ - @XStreamAlias("width") - @XStreamAsAttribute - private Integer width; - - /** - * 默认值 - */ - @XStreamAlias("defaultValue") - @XStreamAsAttribute - private String defaultValue; + @XStreamImplicit + List salaryItems; } diff --git a/src/com/engine/salary/entity/salaryformula/config/FormluaConfig.java b/src/com/engine/salary/entity/salaryformula/config/FormluaConfig.java new file mode 100644 index 000000000..b84cf4f51 --- /dev/null +++ b/src/com/engine/salary/entity/salaryformula/config/FormluaConfig.java @@ -0,0 +1,27 @@ +package com.engine.salary.entity.salaryformula.config; + +import com.engine.salary.entity.salaryformula.po.FormulaPO; +import com.engine.salary.entity.salaryformula.po.FormulaVar; +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamImplicit; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@XStreamAlias("FormluaConfig") +public class FormluaConfig { + + @XStreamImplicit + private List formulas; + + @XStreamImplicit + private List formulaVars; + +} diff --git a/src/com/engine/salary/entity/salaryformula/po/FormulaPO.java b/src/com/engine/salary/entity/salaryformula/po/FormulaPO.java index 36770bd56..ecfae85b7 100644 --- a/src/com/engine/salary/entity/salaryformula/po/FormulaPO.java +++ b/src/com/engine/salary/entity/salaryformula/po/FormulaPO.java @@ -1,5 +1,7 @@ package com.engine.salary.entity.salaryformula.po; +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -12,68 +14,99 @@ import java.util.Date; @Builder @NoArgsConstructor @AllArgsConstructor +@XStreamAlias("Formula") public class FormulaPO { /** * id */ + @XStreamAlias("id") + @XStreamAsAttribute private Long id; /** * 名称 */ + @XStreamAlias("name") + @XStreamAsAttribute private String name; /** * 备注 */ + @XStreamAlias("description") + @XStreamAsAttribute private String description; /** * 模块 */ + @XStreamAlias("module") + @XStreamAsAttribute private String module; /** * 用途 */ + @XStreamAlias("useFor") + @XStreamAsAttribute private String useFor; /** * 引用类型 */ + @XStreamAlias("referenceType") + @XStreamAsAttribute private String referenceType; /** * 返回类型 */ + @XStreamAlias("returnType") + @XStreamAsAttribute private String returnType; /** * 校验类型 */ + @XStreamAlias("validateType") + @XStreamAsAttribute private String validateType; /** * 扩展参数 */ + @XStreamAlias("extendParam") + @XStreamAsAttribute private String extendParam; /** * 公式内容 */ + @XStreamAlias("formula") + @XStreamAsAttribute private String formula; /** * 公式实际运行脚本 */ + @XStreamAlias("formulaRunScript") + @XStreamAsAttribute private String formulaRunScript; /** * 创建人 */ + @XStreamAlias("creator") + @XStreamAsAttribute private Long creator; /** * 是否删除0否1是 */ + @XStreamAlias("deleteType") + @XStreamAsAttribute private Integer deleteType; /** * 创建时间 */ + @XStreamAlias("createTime") + @XStreamAsAttribute private Date createTime; /** * 修改时间 */ + @XStreamAlias("updateTime") + @XStreamAsAttribute private Date updateTime; //主键id集合 diff --git a/src/com/engine/salary/entity/salaryformula/po/FormulaVar.java b/src/com/engine/salary/entity/salaryformula/po/FormulaVar.java index 6630f0c49..79f6bf88e 100644 --- a/src/com/engine/salary/entity/salaryformula/po/FormulaVar.java +++ b/src/com/engine/salary/entity/salaryformula/po/FormulaVar.java @@ -1,5 +1,8 @@ package com.engine.salary.entity.salaryformula.po; +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; +import com.thoughtworks.xstream.annotations.XStreamOmitField; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -12,58 +15,84 @@ import java.util.Date; @Builder @NoArgsConstructor @AllArgsConstructor +@XStreamAlias("FormulaVar") public class FormulaVar { /** * id */ + @XStreamAlias("id") + @XStreamAsAttribute private Long id; /** * 名称 */ + @XStreamAlias("name") + @XStreamAsAttribute private String name; /** * 公式id */ + @XStreamAlias("formulaId") + @XStreamAsAttribute private Long formulaId; /** * 字段id */ + @XStreamAlias("fieldId") + @XStreamAsAttribute private String fieldId; /** * 字段名称 */ + @XStreamAlias("fieldName") + @XStreamAsAttribute private String fieldName; /** * 字段类型,number,string */ + @XStreamAlias("fieldType") + @XStreamAsAttribute private String fieldType; /** * 来源 */ + @XStreamAlias("source") + @XStreamAsAttribute private String source; /** * 排序 */ + @XStreamAlias("orderIndex") + @XStreamAsAttribute private Integer orderIndex; /** * 创建人 */ + @XStreamAlias("creator") + @XStreamAsAttribute private Long creator; /** * 是否删除,0否1是 */ + @XStreamAlias("deleteType") + @XStreamAsAttribute private Integer deleteType; /** * 创建时间 */ + @XStreamAlias("createTime") + @XStreamAsAttribute private Date createTime; /** * 修改时间 */ + @XStreamAlias("updateTime") + @XStreamAsAttribute private Date updateTime; //值 + @XStreamOmitField private String content; diff --git a/src/com/engine/salary/entity/salaryitem/config/SalaryItemAllConfig.java b/src/com/engine/salary/entity/salaryitem/config/SalaryItemAllConfig.java new file mode 100644 index 000000000..06e657bb5 --- /dev/null +++ b/src/com/engine/salary/entity/salaryitem/config/SalaryItemAllConfig.java @@ -0,0 +1,23 @@ +package com.engine.salary.entity.salaryitem.config; + +import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamImplicit; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@XStreamAlias("SalaryItemConfig") +public class SalaryItemAllConfig { + + @XStreamImplicit + List salaryItems; +} diff --git a/src/com/engine/salary/entity/salaryitem/po/SalaryItemPO.java b/src/com/engine/salary/entity/salaryitem/po/SalaryItemPO.java index 1224b0c56..ceb0a0877 100644 --- a/src/com/engine/salary/entity/salaryitem/po/SalaryItemPO.java +++ b/src/com/engine/salary/entity/salaryitem/po/SalaryItemPO.java @@ -5,6 +5,8 @@ import com.engine.salary.enums.SalaryRoundingModeEnum; import com.engine.salary.enums.SalarySystemTypeEnum; import com.engine.salary.enums.SalaryValueTypeEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -27,24 +29,31 @@ import java.util.Date; @AllArgsConstructor //hrsa_salary_item @ElogTransform(name = "薪资项目") +@XStreamAlias("SalaryItem") public class SalaryItemPO { /** * 主键id */ @ElogTransform(name = "主键id") + @XStreamAlias("id") + @XStreamAsAttribute private Long id; /** * 名称 */ @ElogTransform(name = "名称") + @XStreamAlias("name") + @XStreamAsAttribute private String name; /** * 编号 */ @ElogTransform(name = "编号") + @XStreamAlias("code") + @XStreamAsAttribute private String code; /** @@ -53,30 +62,40 @@ public class SalaryItemPO { * @see SalarySystemTypeEnum */ @ElogTransform(name = "是否是系统项目") + @XStreamAlias("systemType") + @XStreamAsAttribute private Integer systemType; /** * 系统薪资项目的id(是从哪个系统薪资项目复制过来的) */ @ElogTransform(name = "系统薪资项目的id") + @XStreamAlias("sysSalaryItemId") + @XStreamAsAttribute private Long sysSalaryItemId; /** * 默认使用。0:默认不适用、1:默认使用 */ @ElogTransform(name = "默认使用") + @XStreamAlias("useDefault") + @XStreamAsAttribute private Integer useDefault; /** * 薪资档案引用。0:薪资档案未引用、1:薪资档案引用 */ @ElogTransform(name = "薪资档案引用") + @XStreamAlias("useInEmployeeSalary") + @XStreamAsAttribute private Integer useInEmployeeSalary; /** * 核算时隐藏 */ @ElogTransform(name = "核算时隐藏") + @XStreamAlias("hideDefault") + @XStreamAsAttribute private Integer hideDefault; /** @@ -85,12 +104,16 @@ public class SalaryItemPO { * @see SalaryRoundingModeEnum */ @ElogTransform(name = "进位规则") + @XStreamAlias("roundingMode") + @XStreamAsAttribute private Integer roundingMode; /** * 保留的小数位数 */ @ElogTransform(name = "保留的小数位数") + @XStreamAlias("pattern") + @XStreamAsAttribute private Integer pattern; /** @@ -99,6 +122,8 @@ public class SalaryItemPO { * @see SalaryValueTypeEnum */ @ElogTransform(name = "取值方式") + @XStreamAlias("valueType") + @XStreamAsAttribute private Integer valueType; /** @@ -107,54 +132,72 @@ public class SalaryItemPO { * @see SalaryDataTypeEnum */ @ElogTransform(name = "字段类型") + @XStreamAlias("dataType") + @XStreamAsAttribute private String dataType; /** * 公式 */ @ElogTransform(name = "公式") + @XStreamAlias("formulaId") + @XStreamAsAttribute private Long formulaId; /** * 备注 */ @ElogTransform(name = "备注") + @XStreamAlias("description") + @XStreamAsAttribute private String description; /** * 是否可以编辑。0:不可编辑、1:可编辑 */ @ElogTransform(name = "是否可以编辑") + @XStreamAlias("canEdit") + @XStreamAsAttribute private Integer canEdit; /** * 租户key */ @ElogTransform(name = "租户key") + @XStreamAlias("tenantKey") + @XStreamAsAttribute private String tenantKey; /** * 创建人id */ @ElogTransform(name = "创建人id") + @XStreamAlias("creator") + @XStreamAsAttribute private Long creator; /** * 是否删除 */ @ElogTransform(name = "是否删除") + @XStreamAlias("deleteType") + @XStreamAsAttribute private Integer deleteType; /** * 创建时间 */ @ElogTransform(name = "创建时间") + @XStreamAlias("createTime") + @XStreamAsAttribute private Date createTime; /** * 更新时间 */ @ElogTransform(name = "更新时间") + @XStreamAlias("updateTime") + @XStreamAsAttribute private Date updateTime; //查询条件 @@ -166,35 +209,47 @@ public class SalaryItemPO { * 可见性 */ @ElogTransform(name = "可见性") + @XStreamAlias("sharedType") + @XStreamAsAttribute private Integer sharedType; /** * 可见范围 */ @ElogTransform(name = "可见范围") + @XStreamAlias("taxAgentIds") + @XStreamAsAttribute private String taxAgentIds; /** * 0不可删除,1可删除 */ @ElogTransform(name = "是否已经删除") + @XStreamAlias("canDelete") + @XStreamAsAttribute private Integer canDelete; /** * 排序 */ @ElogTransform(name = "排序") + @XStreamAlias("sortedIndex") + @XStreamAsAttribute private Integer sortedIndex; /** * 宽度 */ @ElogTransform(name = "宽度") + @XStreamAlias("width") + @XStreamAsAttribute private Integer width; /** * 默认值 */ @ElogTransform(name = "默认值") + @XStreamAlias("defaultValue") + @XStreamAsAttribute private String defaultValue; } diff --git a/src/com/engine/salary/entity/salarysob/config/SalarySobConfig.java b/src/com/engine/salary/entity/salarysob/config/SalarySobConfig.java index 14692502e..12d0455c8 100644 --- a/src/com/engine/salary/entity/salarysob/config/SalarySobConfig.java +++ b/src/com/engine/salary/entity/salarysob/config/SalarySobConfig.java @@ -1,12 +1,15 @@ package com.engine.salary.entity.salarysob.config; +import com.engine.salary.entity.salarysob.po.*; import com.thoughtworks.xstream.annotations.XStreamAlias; -import com.thoughtworks.xstream.annotations.XStreamAsAttribute; +import com.thoughtworks.xstream.annotations.XStreamImplicit; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.List; + @Data @Builder @NoArgsConstructor @@ -14,91 +17,22 @@ import lombok.NoArgsConstructor; @XStreamAlias("SalarySobConfig") public class SalarySobConfig { - /** - * 主键id - */ - @XStreamAlias("id") - @XStreamAsAttribute - private Long id; + @XStreamAlias("salarySob") + private SalarySobPO salarySob; - /** - * 名称 - */ - @XStreamAlias("name") - @XStreamAsAttribute - private String name; + @XStreamImplicit + private List salarySobEmpFields; - /** - * 个税扣缴义务人的主键id - */ - @XStreamAlias("taxAgentId") - @XStreamAsAttribute - private Long taxAgentId; + @XStreamImplicit + private List salarySobItemGroups; - /** - * 应税项目。1:正常工资薪金所得 - */ - @XStreamAlias("incomeCategory") - @XStreamAsAttribute - private Integer incomeCategory; + @XStreamImplicit + private List salarySobItems; - /** - * 薪资周期。1:上上月、2:上月、3:本月、4:下月 - */ - @XStreamAlias("salaryCycleType") - @XStreamAsAttribute - private Integer salaryCycleType; + @XStreamImplicit + private List salarySobBackItems; - /** - * 薪资周期的起始日期 - */ - @XStreamAlias("salaryCycleFromDay") - @XStreamAsAttribute - private Integer salaryCycleFromDay; - - /** - * 税款所属期。1:上上月、2:上月、3:本月、4:下月 - */ - @XStreamAlias("taxCycleType") - @XStreamAsAttribute - private Integer taxCycleType; - - /** - * 考勤周期。1:上上月、2:上月、3:本月、4:下月 - */ - @XStreamAlias("attendCycleType") - @XStreamAsAttribute - private Integer attendCycleType; - - /** - * 考勤周期的起始日期 - */ - @XStreamAlias("attendCycleFromDay") - @XStreamAsAttribute - private Integer attendCycleFromDay; - - /** - * 社保福利所属期。1:上上月、2:上月、3:本月、4:下月 - */ - @XStreamAlias("socialSecurityCycleType") - @XStreamAsAttribute - private Integer socialSecurityCycleType; - - /** - * 是否禁用。0:正常使用、1:禁用 - */ - @XStreamAlias("disable") - @XStreamAsAttribute - private Integer disable; - - /** - * 描述 - */ - @XStreamAlias("description") - @XStreamAsAttribute - private String description; - - -// private List salaryBillConfigs; + @XStreamImplicit + private List salarySobAdjustRules; } diff --git a/src/com/engine/salary/entity/salarysob/po/SalarySobAdjustRulePO.java b/src/com/engine/salary/entity/salarysob/po/SalarySobAdjustRulePO.java index bf646ede5..ad793ed46 100644 --- a/src/com/engine/salary/entity/salarysob/po/SalarySobAdjustRulePO.java +++ b/src/com/engine/salary/entity/salarysob/po/SalarySobAdjustRulePO.java @@ -1,6 +1,8 @@ package com.engine.salary.entity.salarysob.po; import com.engine.salary.enums.salarysob.SalarySobAdjustRuleTypeEnum; +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -24,26 +26,35 @@ import java.util.Date; @AllArgsConstructor @Builder //hrsa_salary_sob_adjust_rule +@XStreamAlias("SalarySobAdjustRule") public class SalarySobAdjustRulePO { /** * 主键id */ + @XStreamAlias("id") + @XStreamAsAttribute private Long id; /** * 薪资账套id */ + @XStreamAlias("salarySobId") + @XStreamAsAttribute private Long salarySobId; /** * 薪资项目id */ + @XStreamAlias("salaryItemId") + @XStreamAsAttribute private Long salaryItemId; /** * 生效日期 */ + @XStreamAlias("dayOfMonth") + @XStreamAsAttribute private Integer dayOfMonth; /** @@ -51,6 +62,8 @@ public class SalarySobAdjustRulePO { * * @see SalarySobAdjustRuleTypeEnum */ + @XStreamAlias("beforeAdjustmentType") + @XStreamAsAttribute private Integer beforeAdjustmentType; /** @@ -58,31 +71,43 @@ public class SalarySobAdjustRulePO { * * @see SalarySobAdjustRuleTypeEnum */ + @XStreamAlias("afterAdjustmentType") + @XStreamAsAttribute private Integer afterAdjustmentType; /** * 租户key */ + @XStreamAlias("tenantKey") + @XStreamAsAttribute private String tenantKey; /** * 创建人id */ + @XStreamAlias("creator") + @XStreamAsAttribute private Long creator; /** * 是否删除 */ + @XStreamAlias("deleteType") + @XStreamAsAttribute private Integer deleteType; /** * 创建时间 */ + @XStreamAlias("createTime") + @XStreamAsAttribute private Date createTime; /** * 更新时间 */ + @XStreamAlias("updateTime") + @XStreamAsAttribute private Date updateTime; Collection ids; diff --git a/src/com/engine/salary/entity/salarysob/po/SalarySobBackItemPO.java b/src/com/engine/salary/entity/salarysob/po/SalarySobBackItemPO.java index 793d64bfe..6eedc4a77 100644 --- a/src/com/engine/salary/entity/salarysob/po/SalarySobBackItemPO.java +++ b/src/com/engine/salary/entity/salarysob/po/SalarySobBackItemPO.java @@ -4,6 +4,8 @@ import com.engine.salary.enums.SalaryRoundingModeEnum; import com.engine.salary.enums.SalaryValueTypeEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -26,26 +28,35 @@ import java.util.stream.Collectors; @Builder @NoArgsConstructor @AllArgsConstructor +@XStreamAlias("SalarySobBackItem") public class SalarySobBackItemPO{ /** * 主键id */ + @XStreamAlias("id") + @XStreamAsAttribute private Long id; /** * 薪资账套id */ + @XStreamAlias("salarySobId") + @XStreamAsAttribute private Long salarySobId; /** * 薪资项目id */ + @XStreamAlias("salaryItemId") + @XStreamAsAttribute private Long salaryItemId; /** * 薪资项目code */ + @XStreamAlias("salaryItemCode") + @XStreamAsAttribute private String salaryItemCode; /** @@ -53,6 +64,8 @@ public class SalarySobBackItemPO{ * * @see SalaryDataTypeEnum */ + @XStreamAlias("dataType") + @XStreamAsAttribute private String dataType; /** @@ -60,11 +73,15 @@ public class SalarySobBackItemPO{ * * @see SalaryRoundingModeEnum */ + @XStreamAlias("roundingMode") + @XStreamAsAttribute private Integer roundingMode; /** * 保留的小数位数 */ + @XStreamAlias("pattern") + @XStreamAsAttribute private Integer pattern; /** @@ -72,52 +89,72 @@ public class SalarySobBackItemPO{ * * @see SalaryValueTypeEnum */ + @XStreamAlias("valueType") + @XStreamAsAttribute private Integer valueType; /** * 公式id */ + @XStreamAlias("formulaId") + @XStreamAsAttribute private Long formulaId; /** * 0:已发项目、1:补发薪资项目 */ + @XStreamAlias("backCalcType") + @XStreamAsAttribute private Integer backCalcType; + /** + * 默认值 + */ + @XStreamAlias("defaultValue") + @XStreamAsAttribute + private String defaultValue; + /** * 租户key */ + @XStreamAlias("tenantKey") + @XStreamAsAttribute @JsonIgnore private String tenantKey; /** * 创建人id */ + @XStreamAlias("creator") + @XStreamAsAttribute @JsonIgnore private Long creator; /** * 是否删除 */ + @XStreamAlias("deleteType") + @XStreamAsAttribute @JsonIgnore private Integer deleteType; /** * 创建时间 */ + @XStreamAlias("createTime") + @XStreamAsAttribute @JsonIgnore private Date createTime; /** * 更新时间 */ + @XStreamAlias("updateTime") + @XStreamAsAttribute @JsonIgnore private Date updateTime; - /** - * 默认值 - */ - private String defaultValue; + diff --git a/src/com/engine/salary/entity/salarysob/po/SalarySobEmpFieldPO.java b/src/com/engine/salary/entity/salarysob/po/SalarySobEmpFieldPO.java index ddac5dcf9..e92f33bf1 100644 --- a/src/com/engine/salary/entity/salarysob/po/SalarySobEmpFieldPO.java +++ b/src/com/engine/salary/entity/salarysob/po/SalarySobEmpFieldPO.java @@ -1,5 +1,7 @@ package com.engine.salary.entity.salarysob.po; +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -27,56 +29,77 @@ import java.util.stream.Collectors; @NoArgsConstructor @AllArgsConstructor //hrsa_salary_sob_emp_field +@XStreamAlias("SalarySobEmpField") public class SalarySobEmpFieldPO { /** * 主键id */ + @XStreamAlias("id") + @XStreamAsAttribute private Long id; /** * 薪资账套id */ + @XStreamAlias("salarySobId") + @XStreamAsAttribute private Long salarySobId; /** * 字段code */ + @XStreamAlias("fieldCode") + @XStreamAsAttribute private String fieldCode; /** * 排序字段 */ + @XStreamAlias("sortedIndex") + @XStreamAsAttribute private Integer sortedIndex; /** * 是否可以删除 */ + @XStreamAlias("canDelete") + @XStreamAsAttribute private Integer canDelete; /** * 租户key */ + @XStreamAlias("tenantKey") + @XStreamAsAttribute private String tenantKey; /** * 创建人id */ + @XStreamAlias("creator") + @XStreamAsAttribute private Long creator; /** * 是否删除 */ + @XStreamAlias("deleteType") + @XStreamAsAttribute private Integer deleteType; /** * 创建时间 */ + @XStreamAlias("createTime") + @XStreamAsAttribute private Date createTime; /** * 更新时间 */ + @XStreamAlias("updateTime") + @XStreamAsAttribute private Date updateTime; Collection ids; diff --git a/src/com/engine/salary/entity/salarysob/po/SalarySobItemGroupPO.java b/src/com/engine/salary/entity/salarysob/po/SalarySobItemGroupPO.java index 97469a997..ce3a569ae 100644 --- a/src/com/engine/salary/entity/salarysob/po/SalarySobItemGroupPO.java +++ b/src/com/engine/salary/entity/salarysob/po/SalarySobItemGroupPO.java @@ -1,5 +1,7 @@ package com.engine.salary.entity.salarysob.po; +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -25,60 +27,85 @@ import java.util.stream.Collectors; @NoArgsConstructor @AllArgsConstructor //hrsa_salary_sob_item_group +@XStreamAlias("SalarySobItemGroup") public class SalarySobItemGroupPO { /** * 主键id */ + @XStreamAlias("id") + @XStreamAsAttribute private Long id; /** * 薪资账套的id */ + @XStreamAlias("salarySobId") + @XStreamAsAttribute private Long salarySobId; /** * 薪资账套中薪资项目分组的名称 */ + @XStreamAlias("name") + @XStreamAsAttribute private String name; /** * 排序字段 */ + @XStreamAlias("sortedIndex") + @XStreamAsAttribute private Integer sortedIndex; /** * 备注 */ + @XStreamAlias("description") + @XStreamAsAttribute private String description; + + //该分类是否隐藏(0不隐藏,1隐藏) + @XStreamAlias("itemHide") + @XStreamAsAttribute + private Long itemHide; + /** * 租户key */ + @XStreamAlias("tenantKey") + @XStreamAsAttribute private String tenantKey; /** * 创建人id */ + @XStreamAlias("creator") + @XStreamAsAttribute private Long creator; /** * 是否删除 */ + @XStreamAlias("deleteType") + @XStreamAsAttribute private Integer deleteType; /** * 创建时间 */ + @XStreamAlias("createTime") + @XStreamAsAttribute private Date createTime; /** * 更新时间 */ + @XStreamAlias("updateTime") + @XStreamAsAttribute private Date updateTime; - //该分类是否隐藏(0不隐藏,1隐藏) - private Long itemHide; Collection ids; diff --git a/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java b/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java index 19a6db873..0f8482201 100644 --- a/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java +++ b/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java @@ -3,6 +3,8 @@ package com.engine.salary.entity.salarysob.po; import com.engine.hrmelog.annotation.ElogTransform; import com.engine.salary.enums.SalaryRoundingModeEnum; import com.engine.salary.enums.SalaryValueTypeEnum; +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -29,83 +31,73 @@ import java.util.stream.Collectors; @AllArgsConstructor //hrsa_salary_sob_item @ElogTransform( name="薪资账套薪资项目" ) +@XStreamAlias("SalarySobItem") public class SalarySobItemPO { /** * 主键id */ + @XStreamAlias("id") + @XStreamAsAttribute private Long id; /** * 薪资账套的id */ + @XStreamAlias("salarySobId") + @XStreamAsAttribute private Long salarySobId; /** * 薪资项目的id */ + @XStreamAlias("salaryItemId") + @XStreamAsAttribute private Long salaryItemId; /** * 薪资账套薪资项目分组id */ + @XStreamAlias("salarySobItemGroupId") + @XStreamAsAttribute private Long salarySobItemGroupId; /** * 公式 */ + @XStreamAlias("formulaId") + @XStreamAsAttribute private Long formulaId; /** * 排序字段 */ + @XStreamAlias("sortedIndex") + @XStreamAsAttribute private Integer sortedIndex; /** * 备注 */ + @XStreamAlias("description") + @XStreamAsAttribute private String description; - /** - * 是否可以删除。0:不可删除、1:可以删除 - */ - private Integer canDelete; - - /** - * 租户key - */ - private String tenantKey; - - /** - * 创建人id - */ - private Long creator; - - /** - * 是否删除 - */ - private Integer deleteType; - - /** - * 创建时间 - */ - private Date createTime; - - /** - * 更新时间 - */ - private Date updateTime; /** * 进位规则 * * @see SalaryRoundingModeEnum */ + @XStreamAlias("roundingMode") + @XStreamAsAttribute private Integer roundingMode; /** * 保留的小数位数 */ + @XStreamAlias("pattern") + @XStreamAsAttribute private Integer pattern; /** @@ -113,17 +105,65 @@ public class SalarySobItemPO { * * @see SalaryValueTypeEnum */ + @XStreamAlias("valueType") + @XStreamAsAttribute private Integer valueType; //该分类是否隐藏(0不隐藏,1隐藏) + @XStreamAlias("itemHide") + @XStreamAsAttribute private Long itemHide; /** * 默认值 */ + @XStreamAlias("defaultValue") + @XStreamAsAttribute private String defaultValue; + /** + * 是否可以删除。0:不可删除、1:可以删除 + */ + @XStreamAlias("canDelete") + @XStreamAsAttribute + private Integer canDelete; + + /** + * 租户key + */ + @XStreamAlias("tenantKey") + @XStreamAsAttribute + private String tenantKey; + + /** + * 创建人id + */ + @XStreamAlias("creator") + @XStreamAsAttribute + private Long creator; + + /** + * 是否删除 + */ + @XStreamAlias("deleteType") + @XStreamAsAttribute + private Integer deleteType; + + /** + * 创建时间 + */ + @XStreamAlias("createTime") + @XStreamAsAttribute + private Date createTime; + + /** + * 更新时间 + */ + @XStreamAlias("updateTime") + @XStreamAsAttribute + private Date updateTime; + //in Collection ids; Collection salarySobIds; diff --git a/src/com/engine/salary/entity/salarysob/po/SalarySobPO.java b/src/com/engine/salary/entity/salarysob/po/SalarySobPO.java index 942731380..b75eb5976 100644 --- a/src/com/engine/salary/entity/salarysob/po/SalarySobPO.java +++ b/src/com/engine/salary/entity/salarysob/po/SalarySobPO.java @@ -2,6 +2,8 @@ package com.engine.salary.entity.salarysob.po; import com.engine.hrmelog.annotation.ElogTransform; import com.engine.salary.util.valid.Compare; +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -21,6 +23,7 @@ import java.util.Date; @AllArgsConstructor @ElogTransform( name="薪资账套" ) //hrsa_salary_sob +@XStreamAlias("SalarySobPO") public class SalarySobPO { /** @@ -28,6 +31,8 @@ public class SalarySobPO { */ @ElogTransform( name="主键" ) @Compare + @XStreamAlias("id") + @XStreamAsAttribute private Long id; /** @@ -35,12 +40,16 @@ public class SalarySobPO { */ @ElogTransform( name="名称" ) @Compare + @XStreamAlias("name") + @XStreamAsAttribute private String name; /** * 个税扣缴义务人的主键id */ @ElogTransform( name="个税扣缴义务人id" ) + @XStreamAlias("taxAgentId") + @XStreamAsAttribute private Long taxAgentId; /** @@ -48,6 +57,8 @@ public class SalarySobPO { */ @ElogTransform( name="薪资类型" ) @Compare + @XStreamAlias("incomeCategory") + @XStreamAsAttribute private Integer incomeCategory; /** @@ -55,6 +66,8 @@ public class SalarySobPO { */ @ElogTransform( name="薪资周期" ) @Compare + @XStreamAlias("salaryCycleType") + @XStreamAsAttribute private Integer salaryCycleType; /** @@ -62,6 +75,8 @@ public class SalarySobPO { */ @ElogTransform( name="薪资周期起始日期" ) @Compare + @XStreamAlias("salaryCycleFromDay") + @XStreamAsAttribute private Integer salaryCycleFromDay; /** @@ -69,6 +84,8 @@ public class SalarySobPO { */ @ElogTransform( name="税款所属期" ) @Compare + @XStreamAlias("taxCycleType") + @XStreamAsAttribute private Integer taxCycleType; /** @@ -76,6 +93,8 @@ public class SalarySobPO { */ @ElogTransform( name="考勤周期" ) @Compare + @XStreamAlias("attendCycleType") + @XStreamAsAttribute private Integer attendCycleType; /** @@ -83,6 +102,8 @@ public class SalarySobPO { */ @ElogTransform( name="考勤周期起始日期" ) @Compare + @XStreamAlias("attendCycleFromDay") + @XStreamAsAttribute private Integer attendCycleFromDay; /** @@ -90,48 +111,64 @@ public class SalarySobPO { */ @ElogTransform( name="社保福利所属期" ) @Compare + @XStreamAlias("socialSecurityCycleType") + @XStreamAsAttribute private Integer socialSecurityCycleType; /** * 是否禁用。0:正常使用、1:禁用 */ @ElogTransform( name="是否禁用" ) + @XStreamAlias("disable") + @XStreamAsAttribute private Integer disable; /** * 描述 */ @ElogTransform( name="描述" ) + @XStreamAlias("description") + @XStreamAsAttribute private String description; /** * 创建人 */ @ElogTransform( name="创建人" ) + @XStreamAlias("creator") + @XStreamAsAttribute private Long creator; /** * 创建时间 */ @ElogTransform( name="创建时间" ) + @XStreamAlias("createTime") + @XStreamAsAttribute private Date createTime; /** * 更新时间 */ @ElogTransform( name="更新时间" ) + @XStreamAlias("updateTime") + @XStreamAsAttribute private Date updateTime; /** * 是否已删除。0:未删除、1:已删除 */ @ElogTransform( name="是否已删除" ) + @XStreamAlias("deleteType") + @XStreamAsAttribute private Integer deleteType; /** * 租户ID */ @ElogTransform( name="租户" ) + @XStreamAlias("tenantKey") + @XStreamAsAttribute private String tenantKey; Collection ids; diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveItemMapper.java b/src/com/engine/salary/mapper/archive/SalaryArchiveItemMapper.java index c96deb548..78e83be7b 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveItemMapper.java +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveItemMapper.java @@ -1,13 +1,11 @@ package com.engine.salary.mapper.archive; -import com.engine.salary.entity.salaryarchive.config.ArchiveFieldConfig; import com.engine.salary.entity.salaryarchive.dto.SalaryItemAdjustRecordListDTO; import com.engine.salary.entity.salaryarchive.param.SalaryArchiveItemQueryParam; import com.engine.salary.entity.salaryarchive.param.SalaryItemAdjustRecordQueryParam; import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO; import org.apache.ibatis.annotations.Param; -import java.util.Collection; import java.util.List; public interface SalaryArchiveItemMapper { @@ -99,5 +97,4 @@ public interface SalaryArchiveItemMapper { int batchUpdate(@Param("collection") List pos); - List getAllConfig(@Param("ids") Collection ids); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveItemMapper.xml b/src/com/engine/salary/mapper/archive/SalaryArchiveItemMapper.xml index 4a3619497..ff6f3ee20 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveItemMapper.xml +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveItemMapper.xml @@ -1193,21 +1193,5 @@ - - - - \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salarysob/SalarySobMapper.java b/src/com/engine/salary/mapper/salarysob/SalarySobMapper.java index c22bc4fe5..999c805d1 100644 --- a/src/com/engine/salary/mapper/salarysob/SalarySobMapper.java +++ b/src/com/engine/salary/mapper/salarysob/SalarySobMapper.java @@ -1,6 +1,5 @@ package com.engine.salary.mapper.salarysob; -import com.engine.salary.entity.salarysob.config.SalarySobConfig; import com.engine.salary.entity.salarysob.po.SalarySobPO; import org.apache.ibatis.annotations.Param; @@ -55,5 +54,4 @@ public interface SalarySobMapper { List listByName(SalarySobPO build); - List getConfig(Long taxAgentId); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salarysob/SalarySobMapper.xml b/src/com/engine/salary/mapper/salarysob/SalarySobMapper.xml index c8602279c..59f40120d 100644 --- a/src/com/engine/salary/mapper/salarysob/SalarySobMapper.xml +++ b/src/com/engine/salary/mapper/salarysob/SalarySobMapper.xml @@ -508,28 +508,6 @@ and name = #{name} - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/com/engine/salary/service/SalaryArchiveItemService.java b/src/com/engine/salary/service/SalaryArchiveItemService.java index d640fe17a..573aa0aa3 100644 --- a/src/com/engine/salary/service/SalaryArchiveItemService.java +++ b/src/com/engine/salary/service/SalaryArchiveItemService.java @@ -157,5 +157,7 @@ public interface SalaryArchiveItemService { * @date 2022/11/14 13:38 */ String editSingleSalaryItem(SalaryArchiveItemSaveParam salaryArchiveItemSaveParam); - List getAllConfig(); + + + ArchiveFieldConfig getConfig(); } diff --git a/src/com/engine/salary/service/SalaryFormulaService.java b/src/com/engine/salary/service/SalaryFormulaService.java index 618011426..2fbe3f3d4 100644 --- a/src/com/engine/salary/service/SalaryFormulaService.java +++ b/src/com/engine/salary/service/SalaryFormulaService.java @@ -1,6 +1,7 @@ package com.engine.salary.service; import com.engine.salary.entity.salaryformula.ExpressFormula; +import com.engine.salary.entity.salaryformula.config.FormluaConfig; import com.engine.salary.entity.salaryformula.param.SalaryFormulaMockParam; import com.engine.salary.entity.salaryformula.param.SalaryFormulaSaveParam; import com.engine.salary.entity.salaryformula.po.FormulaPO; @@ -56,4 +57,6 @@ public interface SalaryFormulaService { List listByIds(List formulaIds); void update(FormulaPO formulaPO); + + FormluaConfig getFormluaConfig(); } diff --git a/src/com/engine/salary/service/SalaryItemService.java b/src/com/engine/salary/service/SalaryItemService.java index 04c3e9257..b2edbbc7f 100644 --- a/src/com/engine/salary/service/SalaryItemService.java +++ b/src/com/engine/salary/service/SalaryItemService.java @@ -1,5 +1,6 @@ package com.engine.salary.service; +import com.engine.salary.entity.salaryitem.config.SalaryItemAllConfig; import com.engine.salary.entity.salaryitem.config.SalaryItemConfig; import com.engine.salary.entity.salaryitem.param.*; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; @@ -151,6 +152,8 @@ public interface SalaryItemService { */ void syncSalaryItemToSalarySobItem(SyncSalaryItemParam syncSalaryItemParam); + SalaryItemAllConfig getConfig(); + List getConfig(SalaryItemExportParam param); List getAllConfig(SalaryItemExportParam param); diff --git a/src/com/engine/salary/service/SalarySobItemService.java b/src/com/engine/salary/service/SalarySobItemService.java index c640291e3..63a01c6d5 100644 --- a/src/com/engine/salary/service/SalarySobItemService.java +++ b/src/com/engine/salary/service/SalarySobItemService.java @@ -1,5 +1,7 @@ package com.engine.salary.service; +import com.engine.salary.entity.salaryarchive.config.ArchiveFieldConfig; +import com.engine.salary.entity.salaryitem.config.SalaryItemAllConfig; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemFormDTO; diff --git a/src/com/engine/salary/service/TaxAgentService.java b/src/com/engine/salary/service/TaxAgentService.java index cfe02dda0..65ac2c77c 100644 --- a/src/com/engine/salary/service/TaxAgentService.java +++ b/src/com/engine/salary/service/TaxAgentService.java @@ -259,5 +259,7 @@ public interface TaxAgentService { * @return */ Collection listEmployeeIdsInTaxAgent(Long taxAgentId); + + List getAllConfig(); } diff --git a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java index 5144ccdf8..74ae1de51 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java @@ -13,6 +13,7 @@ import com.engine.salary.entity.salaryarchive.dto.SalaryItemAdjustRecordListDTO; import com.engine.salary.entity.salaryarchive.param.*; import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO; import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; +import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.UserStatusEnum; @@ -22,10 +23,7 @@ import com.engine.salary.enums.salaryarchive.SalaryArchiveItemAdjustReasonEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.archive.SalaryArchiveItemMapper; -import com.engine.salary.service.SalaryArchiveItemService; -import com.engine.salary.service.SalaryArchiveService; -import com.engine.salary.service.SalaryEmployeeService; -import com.engine.salary.service.TaxAgentService; +import com.engine.salary.service.*; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.SalaryLoggerUtil; @@ -76,6 +74,10 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } + private SalaryItemService getSalaryItemService(User user) { + return ServiceUtil.getService(SalaryItemServiceImpl.class, user); + } + private SalaryArchiveService getSalaryArchiveService(User user) { return ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); } @@ -275,10 +277,7 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi return StringUtils.EMPTY; } - @Override - public List getAllConfig() { - return getSalaryArchiveItemMapper().getAllConfig(null); - } + /** * @return null @@ -739,4 +738,10 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi } + @Override + public ArchiveFieldConfig getConfig() { + List salaryItemPOList = getSalaryItemService(user).listByParam(SalaryItemSearchParam.builder().useInEmployeeSalary(1).build()); + return ArchiveFieldConfig.builder().salaryItems(salaryItemPOList).build(); + } + } diff --git a/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java b/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java index 9d1a125df..9a32da966 100644 --- a/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java @@ -4,6 +4,7 @@ import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryformula.ExpressFormula; +import com.engine.salary.entity.salaryformula.config.FormluaConfig; import com.engine.salary.entity.salaryformula.param.SalaryFormulaMockParam; import com.engine.salary.entity.salaryformula.param.SalaryFormulaSaveParam; import com.engine.salary.entity.salaryformula.po.FormulaPO; @@ -401,4 +402,10 @@ public class SalaryFormulaServiceImpl extends Service implements SalaryFormulaSe getFormulaMapper().updateIgnoreNull(formulaPO); } + @Override + public FormluaConfig getFormluaConfig() { + List formulaPOS = getFormulaMapper().listAll(); + List formulaVars = getFormulaVarMapper().listAll(); + return FormluaConfig.builder().formulas(formulaPOS).formulaVars(formulaVars).build(); + } } diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index 6703fdc30..85675ca8f 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -14,6 +14,7 @@ import com.engine.salary.entity.salaryformula.param.SalaryFormulaSaveParam; import com.engine.salary.entity.salaryformula.po.FormulaPO; import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.entity.salaryitem.bo.SalaryItemBO; +import com.engine.salary.entity.salaryitem.config.SalaryItemAllConfig; import com.engine.salary.entity.salaryitem.config.SalaryItemConfig; import com.engine.salary.entity.salaryitem.config.SalaryItemExcelConfig; import com.engine.salary.entity.salaryitem.param.*; @@ -494,6 +495,12 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService } } + @Override + public SalaryItemAllConfig getConfig() { + List salaryItemPOList = listByParam(SalaryItemSearchParam.builder().useInEmployeeSalary(0).build()); + return SalaryItemAllConfig.builder().salaryItems(salaryItemPOList).build(); + } + @Data @Builder @NoArgsConstructor @@ -741,10 +748,9 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService ExcelUtil.parseHeader(SalaryItemExcelConfig.class, titles, dataIndexList); - List> rows = new ArrayList<>(); rows.add(titles); - if (param.isHasData()){ + if (param.isHasData()) { List configs = getConfig(SalaryItemExportParam.builder().build()); configs.forEach(e -> { List row = new ArrayList<>(); diff --git a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java index c85257886..13a277b66 100644 --- a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java @@ -10,7 +10,10 @@ 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.bo.SalaryAcctConfig; +import com.engine.salary.entity.salaryarchive.config.ArchiveFieldConfig; import com.engine.salary.entity.salaryformula.ExpressFormula; +import com.engine.salary.entity.salaryitem.config.SalaryItemAllConfig; +import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.bo.SalarySobItemAggregateBO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; @@ -585,4 +588,5 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe return salarySobItemFormDTO; } + } diff --git a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java index 6fb14f13f..bc10a146b 100644 --- a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java @@ -80,6 +80,23 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { // return MapperProxyFactory.getProxy(SalarySobBackItemMapper.class); // } + private SalarySobItemService getSalarySobItemService(User user) { + return ServiceUtil.getService(SalarySobItemServiceImpl.class, user); + } + + private SalarySobItemGroupService getSalarySobItemGroupService(User user) { + return ServiceUtil.getService(SalarySobItemGroupServiceImpl.class, user); + } + + private SalarySobEmpFieldService getSalarySobEmpFieldService(User user) { + return ServiceUtil.getService(SalarySobEmpFieldServiceImpl.class, user); + } + + private SalarySobAdjustRuleService getSalarySobAdjustRuleService(User user) { + return ServiceUtil.getService(SalarySobAdjustRuleServiceImpl.class, user); + } + + private SalarySobMapper getSalarySobMapper() { return MapperProxyFactory.getProxy(SalarySobMapper.class); } @@ -284,15 +301,15 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { // 保存薪资账套 salarySobMapper.insert(salarySobPO); // 记录日志 - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setUser(user); - loggerContext.setTargetId(String.valueOf(salarySobPO.getId())); - loggerContext.setTargetName(salarySobPO.getName()); - loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新建薪资账套")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新建薪资账套") + ": " + salarySobPO.getName()); - loggerContext.setNewValues(salarySobPO); - SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(salarySobPO.getId())); + loggerContext.setTargetName(salarySobPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新建薪资账套")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新建薪资账套") + ": " + salarySobPO.getName()); + loggerContext.setNewValues(salarySobPO); + SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); // 新建薪资账套时,保存默认的员工信息字段 saveDefaultEmpField(salarySobPO); // 新建薪资账套时,保存默认的薪资项目 @@ -556,18 +573,18 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { salarySobPO.setUpdateTime(new Date()); salarySobMapper.updateById(salarySobPO); // 记录日志 - String operateTypeName = Objects.equals(disableParam.getDisable(), NumberUtils.INTEGER_ONE) ? - SalaryI18nUtil.getI18nLabel(0, "禁用薪资账套") : SalaryI18nUtil.getI18nLabel(0, "启用薪资账套"); - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setUser(user); - loggerContext.setTargetId("" + salarySobPO.getId()); - loggerContext.setTargetName(salarySobPO.getName()); - loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(operateTypeName); - loggerContext.setOperatedesc(operateTypeName + ": " + salarySobPO.getName()); - loggerContext.setOldValues(oldSalarySobPO); - loggerContext.setNewValues(salarySobPO); - SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); + String operateTypeName = Objects.equals(disableParam.getDisable(), NumberUtils.INTEGER_ONE) ? + SalaryI18nUtil.getI18nLabel(0, "禁用薪资账套") : SalaryI18nUtil.getI18nLabel(0, "启用薪资账套"); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + salarySobPO.getId()); + loggerContext.setTargetName(salarySobPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(operateTypeName); + loggerContext.setOperatedesc(operateTypeName + ": " + salarySobPO.getName()); + loggerContext.setOldValues(oldSalarySobPO); + loggerContext.setNewValues(salarySobPO); + SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); } @Override @@ -622,18 +639,18 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { getSalarySobBackItemService(user).deleteBySalarySobIds(ids); // 删除薪资账套的校验规则 getSalarySobCheckRuleService(user).deleteBySalarySobIds(ids); - // 记录日志 - salarySobPOS.forEach(salarySobPO -> { - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setUser(user); - loggerContext.setTargetId("" + salarySobPO.getId()); - loggerContext.setTargetName(salarySobPO.getName()); - loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除薪资账套")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除薪资账套")); - loggerContext.setOldValues(salarySobPO); - SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); - }); + // 记录日志 + salarySobPOS.forEach(salarySobPO -> { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + salarySobPO.getId()); + loggerContext.setTargetName(salarySobPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除薪资账套")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除薪资账套")); + loggerContext.setOldValues(salarySobPO); + SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); + }); } @Override @@ -728,15 +745,15 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { if (CollectionUtils.isNotEmpty(result.getSalarySobCheckRules())) { getSalarySobCheckRuleService(user).batchSave(result.getSalarySobCheckRules()); } - // 记录日志 - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setUser(user); - loggerContext.setTargetId("" + result.getSalarySob().getId()); - loggerContext.setTargetName(result.getSalarySob().getName()); - loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98570, "复制薪资账套")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98570, "复制薪资账套") + ": " + salarySobPO.getName()); - SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); + // 记录日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + result.getSalarySob().getId()); + loggerContext.setTargetName(result.getSalarySob().getName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98570, "复制薪资账套")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98570, "复制薪资账套") + ": " + salarySobPO.getName()); + SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); } @Override @@ -787,7 +804,23 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { @Override public List getConfig(Long taxAgentId) { - return getSalarySobMapper().getConfig(taxAgentId); + List salarySobPOS = getSalarySobMapper().listSome(SalarySobPO.builder().taxAgentId(taxAgentId).build()); + return salarySobPOS.stream().map(salarySobPO -> { + Long salarySobId = salarySobPO.getId(); + List salarySobEmpFieldPOS = getSalarySobEmpFieldService(user).listBySalarySobId(salarySobId); + List salarySobItemGroupPOS = getSalarySobItemGroupService(user).listBySalarySobId(salarySobId); + List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salarySobId); + List salarySobBackItemPOS = getSalarySobBackItemService(user).listBySalarySobId(salarySobId); + List salarySobAdjustRulePOS = getSalarySobAdjustRuleService(user).listBySalarySobId(salarySobId); + return SalarySobConfig.builder() + .salarySob(salarySobPO) + .salarySobEmpFields(salarySobEmpFieldPOS) + .salarySobItemGroups(salarySobItemGroupPOS) + .salarySobItems(salarySobItemPOS) + .salarySobBackItems(salarySobBackItemPOS) + .salarySobAdjustRules(salarySobAdjustRulePOS) + .build(); + }).collect(Collectors.toList()); } diff --git a/src/com/engine/salary/sys/entity/param/uploadConfigParam.java b/src/com/engine/salary/sys/entity/param/uploadConfigParam.java new file mode 100644 index 000000000..50c2f6c9e --- /dev/null +++ b/src/com/engine/salary/sys/entity/param/uploadConfigParam.java @@ -0,0 +1,25 @@ +package com.engine.salary.sys.entity.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 初始化薪酬配置 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class uploadConfigParam { + + //上传文件id + String imageId; + +} diff --git a/src/com/engine/salary/util/xml/XStreamUtil.java b/src/com/engine/salary/util/xml/XStreamUtil.java new file mode 100644 index 000000000..d0a30e215 --- /dev/null +++ b/src/com/engine/salary/util/xml/XStreamUtil.java @@ -0,0 +1,68 @@ +package com.engine.salary.util.xml; + +import cn.hutool.core.util.StrUtil; +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.io.HierarchicalStreamDriver; +import com.thoughtworks.xstream.io.naming.NoNameCoder; +import com.thoughtworks.xstream.io.xml.DomDriver; +import com.thoughtworks.xstream.security.AnyTypePermission; + +import java.util.Objects; + +public class XStreamUtil { + //new NoNameCoder() 解决 _ 被序列化成 __ 的问题 + private static final NoNameCoder noNameCoder = new NoNameCoder(); + + private static XStream xStream = new XStream(new DomDriver("UTF-8", noNameCoder)); + + private static XStream getxStream(HierarchicalStreamDriver driver){ + if(Objects.isNull(driver)){ + return xStream; + } + return new XStream(driver); + } + + public static T unmarshal(String pkgName, Class cla, String xmlStr, HierarchicalStreamDriver driver) { + xStream = getxStream(driver); + + if (StrUtil.isEmpty(pkgName)) { + //高版本为了解决安全漏洞,增加了白名单机制, 如果不设置这个权限可能会报错 + xStream.addPermission(AnyTypePermission.ANY); + } else { + //设置允许解析的包,如果不想设置可以用 addPermission(AnyTypePermission.ANY) 代替 + xStream.allowTypesByWildcard(new String[]{pkgName}); + } + + //支持注解,不然使用的XStream注解不会生效且不报错 + xStream.autodetectAnnotations(true); + xStream.processAnnotations(cla); + + //忽略未知属性, 如果不添加这个,当Xml报文中出现实体中没有的属性时会报错 No such field + xStream.ignoreUnknownElements(); + + return (T) xStream.fromXML(xmlStr); + } + + public static T unmarshal(String pkgName, Class cla, String xmlStr) { + return unmarshal(pkgName, cla, xmlStr, null); + } + + public static T unmarshal(Class cla, String xmlStr) { + return unmarshal(null, cla, xmlStr, null); + } + + public static String marshal(Object o, DomDriver driver) { + xStream = getxStream(driver); + + //支持注解,不然使用的 @XStreamAlias() 注解不会生效而且不会报错 + xStream.autodetectAnnotations(true); + + //注册自定义时间转换器,使得XStream全局支持LocalDateTime, 或者不在这里注册,使用@XStreamConverter(LocalDateTimeConverter.class)注解在单一字段上 +// xStream.registerConverter(new LocalDateTimeConverter()); + return xStream.toXML(o); + } + + public static String marshal(Object o){ + return marshal(o, null); + } +} diff --git a/src/com/engine/salary/web/SalarySystemConfigController.java b/src/com/engine/salary/web/SalarySystemConfigController.java index 8b00036f4..2b80395a3 100644 --- a/src/com/engine/salary/web/SalarySystemConfigController.java +++ b/src/com/engine/salary/web/SalarySystemConfigController.java @@ -1,16 +1,15 @@ package com.engine.salary.web; import com.engine.common.util.ServiceUtil; -import com.engine.salary.sys.entity.param.AppSettingSaveParam; -import com.engine.salary.sys.entity.param.MatchEmployeeModeSaveParam; -import com.engine.salary.sys.entity.param.OrderRuleParam; -import com.engine.salary.sys.entity.param.SalarySysConfQueryParam; +import com.engine.salary.entity.config.SalaryConfig; +import com.engine.salary.sys.entity.param.*; import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.sys.entity.vo.AppSettingVO; import com.engine.salary.sys.entity.vo.OrderRuleVO; import com.engine.salary.sys.enums.TaxDeclarationFunctionEnum; import com.engine.salary.util.ResponseResult; import com.engine.salary.util.page.PageInfo; +import com.engine.salary.util.xml.XStreamUtil; import com.engine.salary.wrapper.SalarySystemConfigWrapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; import lombok.extern.slf4j.Slf4j; @@ -23,6 +22,14 @@ 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.BufferedWriter; +import java.io.OutputStreamWriter; +import java.io.UnsupportedEncodingException; +import java.io.Writer; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.time.LocalDate; import java.util.Map; @Slf4j @@ -330,33 +337,42 @@ public class SalarySystemConfigController { public Response downloadConfig(@Context HttpServletRequest request, @Context HttpServletResponse response) { try { User user = HrmUserVarify.getUser(request, response); - XSSFWorkbook workbook = getSalarySystemConfigWrapper(user).downloadConfig(queryParam); - String fileName = "累计专项附加扣除导入模板" + LocalDate.now(); + SalaryConfig salaryConfig = getSalarySystemConfigWrapper(user).downloadConfig(); + +// XStream xStream = new XStream(); +// //由于使用的注解,将自动检测注解开启 +// xStream.autodetectAnnotations(true); +// String xml = xStream.toXML(salaryConfig); + String xml = XStreamUtil.marshal(salaryConfig); + + String fileName = "薪酬配置" + LocalDate.now(); try { - fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); + fileName = URLEncoder.encode(fileName + ".xml", "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } StreamingOutput output = outputStream -> { - workbook.write(outputStream); - outputStream.flush(); + Writer writer = new BufferedWriter(new OutputStreamWriter(outputStream, StandardCharsets.UTF_8)); + writer.write(xml); + writer.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; + log.error("下载薪酬配置", e); + throw new RuntimeException("下载薪酬配置", e); } - } @POST - @Path("/downloadConfig1") + @Path("/uploadConfig") @Produces(MediaType.APPLICATION_JSON) - public String downloadConfig1(@Context HttpServletRequest request, @Context HttpServletResponse response) { + public String initConfig(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody uploadConfigParam param) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getSalarySystemConfigWrapper(user)::downloadConfig); + return new ResponseResult(user).run(getSalarySystemConfigWrapper(user)::uploadConfig, param); } diff --git a/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java b/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java index c18ba3458..9da1343ea 100644 --- a/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java @@ -4,19 +4,18 @@ import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.entity.config.SalaryConfig; import com.engine.salary.entity.salaryarchive.config.ArchiveFieldConfig; -import com.engine.salary.entity.salaryitem.config.SalaryItemConfig; -import com.engine.salary.entity.salaryitem.param.SalaryItemExportParam; +import com.engine.salary.entity.salaryformula.config.FormluaConfig; +import com.engine.salary.entity.salaryitem.config.SalaryItemAllConfig; import com.engine.salary.entity.taxagent.config.TaxAgentConfig; import com.engine.salary.service.SalaryArchiveItemService; +import com.engine.salary.service.SalaryFormulaService; import com.engine.salary.service.SalaryItemService; import com.engine.salary.service.TaxAgentService; import com.engine.salary.service.impl.SalaryArchiveItemServiceImpl; +import com.engine.salary.service.impl.SalaryFormulaServiceImpl; import com.engine.salary.service.impl.SalaryItemServiceImpl; import com.engine.salary.service.impl.TaxAgentServiceImpl; -import com.engine.salary.sys.entity.param.AppSettingSaveParam; -import com.engine.salary.sys.entity.param.MatchEmployeeModeSaveParam; -import com.engine.salary.sys.entity.param.OrderRuleParam; -import com.engine.salary.sys.entity.param.SalarySysConfQueryParam; +import com.engine.salary.sys.entity.param.*; import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.sys.entity.vo.AppSettingVO; import com.engine.salary.sys.entity.vo.OrderRuleVO; @@ -28,13 +27,16 @@ import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.util.valid.RuntimeTypeEnum; import com.engine.salary.util.valid.ValidUtil; -import com.thoughtworks.xstream.XStream; -import com.thoughtworks.xstream.io.xml.CompactWriter; +import com.engine.salary.util.xml.XStreamUtil; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.util.IOUtils; +import weaver.file.ImageFileManager; import weaver.general.BaseBean; import weaver.hrm.User; import java.io.*; +import java.nio.charset.StandardCharsets; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -65,6 +67,10 @@ public class SalarySystemConfigWrapper extends Service { return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } + private SalaryFormulaService getSalaryFormulaService(User user) { + return ServiceUtil.getService(SalaryFormulaServiceImpl.class, user); + } + public Map info() { BaseBean baseBean = new BaseBean(); String log = baseBean.getPropValue("hrmSalary", "log"); @@ -194,28 +200,176 @@ public class SalarySystemConfigWrapper extends Service { getSalarySysConfService(user).saveSalarySendFeedback(param); } - public Object downloadConfig() { - XStream xStream = new XStream(); - //由于使用的注解,将自动检测注解开启 - xStream.autodetectAnnotations(true); + public SalaryConfig downloadConfig() { SalaryConfig salaryConfig = new SalaryConfig(); - List salaryItemConfigs = getSalaryItemService(user).getAllConfig(SalaryItemExportParam.builder().build()); - salaryConfig.setSalaryItemConfigs(salaryItemConfigs); - List archiveFieldConfigs = getSalaryArchiveItemService(user).getAllConfig(); - salaryConfig.setArchiveFieldConfig(archiveFieldConfigs); + + FormluaConfig formluaConfig = getSalaryFormulaService(user).getFormluaConfig(); + salaryConfig.setFormluaConfig(formluaConfig); + + SalaryItemAllConfig salaryItemConfig = getSalaryItemService(user).getConfig(); + salaryConfig.setSalaryItemConfig(salaryItemConfig); + + ArchiveFieldConfig archiveFieldConfig = getSalaryArchiveItemService(user).getConfig(); + salaryConfig.setArchiveFieldConfigs(archiveFieldConfig); List taxAgentConfigs = getTaxAgentService(user).getAllConfig(); salaryConfig.setTaxAgentConfigs(taxAgentConfigs); - String xml = xStream.toXML(salaryConfig); - System.out.println(xml); - Writer writer = new StringWriter(); - xStream.marshal(xml, new CompactWriter(writer)); - OutputStream output = new ByteArrayOutputStream(); - xStream.marshal(xml, new CompactWriter(new OutputStreamWriter(output))); - return s; + return salaryConfig; + } + public void uploadConfig(uploadConfigParam param) { + Date now = new Date(); + InputStream fileInputStream = null; + try { + fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); + Reader reader = new InputStreamReader(fileInputStream, StandardCharsets.UTF_8); + BufferedReader bufferedReader = new BufferedReader(reader); + String line; + StringBuilder xml = new StringBuilder(); + while ((line = bufferedReader.readLine()) != null) { + xml.append(line); + } + + SalaryConfig config = XStreamUtil.unmarshal(SalaryConfig.class, xml.toString()); + System.out.println(config); + +// List configs = ExcelParseHelper.parse2Map(fileInputStream, SalaryItemExcelConfig.class, 0, 1, 13, EXCEL_TYPE_XLSX); +// +// // 错误excel内容 +// ImportExcelResponse response = ImportExcelResponse.builder().totalCount(configs.size()).successCount(configs.size()).errorCount(0).errorData(new ArrayList<>()).build(); +// +// List sysSalaryItemPOS = sysSalaryItemBiz.listAll(); +// Set sysItems = SalaryEntityUtil.properties(sysSalaryItemPOS, SysSalaryItemPO::getName); +// +// List adds = new ArrayList<>(); +// List updates = new ArrayList<>(); +// Map> formulaItems = new HashMap<>(); +// for (int i = 0; i < configs.size(); i++) { +// String rowIndex = String.format("第%s行", i + 2); +// SalaryItemExcelConfig config = configs.get(i); +// String name = config.getName(); +// SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByDefaultLabel(config.getValueType()); +// SalaryDataTypeEnum salaryDataTypeEnum = SalaryDataTypeEnum.parseByValue(config.getDataType()); +// SalaryItemPO itemPO = getByName(name); +// if (itemPO == null) { +// +// if (sysItems.contains(name)) { +// ImportExcelResponse.Error error = ImportExcelResponse.Error.builder().message(String.format("%s“%s”的名称与系统名称冲突", rowIndex, name)).build(); +// response.setSuccessCount(response.getSuccessCount() - 1); +// response.setErrorCount(response.getErrorCount() + 1); +// response.getErrorData().add(error); +// continue; +// } +// +// itemPO = SalaryItemPO.builder() +// .id(IdGenerator.generate()) +// .code(IdGenerator.getUUID()) +// .name(name) +// .systemType(SalarySystemTypeEnum.CUSTOM.getValue()) +// .sysSalaryItemId(org.apache.commons.lang3.math.NumberUtils.LONG_ZERO) +// .useDefault(SalaryOnOffEnum.parseByDefaultLabel(config.getUseDefault()).getValue()) +// .useInEmployeeSalary(SalaryOnOffEnum.OFF.getValue()) +// .hideDefault(SalaryOnOffEnum.parseByDefaultLabel(config.getHideDefault()).getValue()) +// .roundingMode(SalaryRoundingModeEnum.parseByDefaultLabel(config.getRoundingMode()).getValue()) +// .pattern(NumberUtil.isNumber(config.getPattern()) ? Integer.parseInt(config.getPattern()) : 2) +// .valueType(salaryValueTypeEnum.getValue()) +// .dataType(salaryDataTypeEnum.getValue()) +// //后补 +// .formulaId(0L) +// .description(config.getDescription()) +// .canEdit(org.apache.commons.lang3.math.NumberUtils.INTEGER_ONE) +// .creator((long) user.getUID()) +// .deleteType(0) +// .createTime(now) +// .updateTime(now) +// .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) +// .sharedType(0) +// .taxAgentIds("") +// .sortedIndex(NumberUtil.isNumber(config.getSortedIndex()) ? Integer.parseInt(config.getSortedIndex()) : null) +// .width(NumberUtil.isNumber(config.getWidth()) ? Integer.parseInt(config.getWidth()) : null) +// .defaultValue(config.getDefaultValue()) +// .build(); +// adds.add(itemPO); +// } else { +// +// if (SalarySystemTypeEnum.parseByValue(itemPO.getSystemType()) == SalarySystemTypeEnum.SYSTEM) { +// ImportExcelResponse.Error error = ImportExcelResponse.Error.builder().message(String.format("%s“%s”是系统薪资项目不支持修改", rowIndex, name)).build(); +// response.setSuccessCount(response.getSuccessCount() - 1); +// response.setErrorCount(response.getErrorCount() + 1); +// response.getErrorData().add(error); +// continue; +// } +// +// itemPO.setUseDefault(SalaryOnOffEnum.parseByDefaultLabel(config.getUseDefault()).getValue()); +// itemPO.setHideDefault(SalaryOnOffEnum.parseByDefaultLabel(config.getHideDefault()).getValue()); +// itemPO.setRoundingMode(SalaryRoundingModeEnum.parseByDefaultLabel(config.getRoundingMode()).getValue()); +// itemPO.setPattern(NumberUtil.isNumber(config.getPattern()) ? Integer.parseInt(config.getPattern()) : 2); +// itemPO.setValueType(salaryValueTypeEnum.getValue()); +// itemPO.setDataType(salaryDataTypeEnum.getValue()); +// //后补 +// itemPO.setFormulaId(0L); +// itemPO.setDescription(config.getDescription()); +// itemPO.setUpdateTime(now); +// itemPO.setSortedIndex(NumberUtil.isNumber(config.getSortedIndex()) ? Integer.parseInt(config.getSortedIndex()) : null); +// itemPO.setWidth(NumberUtil.isNumber(config.getWidth()) ? Integer.parseInt(config.getWidth()) : null); +// itemPO.setDefaultValue(config.getDefaultValue()); +// updates.add(itemPO); +// } +// +// //解析公式 +// if (salaryValueTypeEnum == SalaryValueTypeEnum.FORMULA || salaryValueTypeEnum == SalaryValueTypeEnum.SQL) { +// Long id = itemPO.getId(); +// String formula = config.getFormula(); +// String sqlReturnKey = config.getSqlReturnKey(); +// Map map = new HashMap<>(); +// map.put("rowIndex", rowIndex); +// map.put("formula", formula); +// map.put("sqlReturnKey", sqlReturnKey); +// formulaItems.put(id, map); +// } +// } +// +// adds.forEach(getSalaryItemMapper()::insertIgnoreNull); +// updates.forEach(getSalaryItemMapper()::updateIgnoreNull); +// +// for (Long id : formulaItems.keySet()) { +// SalaryItemPO itemPO = getById(id); +// Map map = formulaItems.get(id); +// String rowIndex = map.get("rowIndex"); +// String formula = map.get("formula"); +// String sqlReturnKey = map.get("sqlReturnKey"); +// SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByValue(itemPO.getValueType()); +// SalaryDataTypeEnum salaryDataTypeEnum = SalaryDataTypeEnum.parseByValue(itemPO.getDataType()); +// SalaryFormulaSaveParam saveParam = SalaryFormulaSaveParam.builder() +// .name(itemPO.getName()) +// .module("salary") +// .useFor("salaryitem") +// .referenceType(salaryValueTypeEnum == SalaryValueTypeEnum.FORMULA ? ReferenceTypeEnum.FORMULA.getValue() : ReferenceTypeEnum.SQL.getValue()) +// .returnType(salaryDataTypeEnum == SalaryDataTypeEnum.STRING ? ReturnTypeEnum.STRING.getValue() : ReturnTypeEnum.NUMBER.getValue()) +// .validateType(salaryDataTypeEnum == SalaryDataTypeEnum.STRING ? ReturnTypeEnum.STRING.getValue() : ReturnTypeEnum.NUMBER.getValue()) +// .extendParam("{\"isCustomFunction\":\"0\",\"sqlReturnKey\":\"" + sqlReturnKey + "\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}") +// .formula(formula) +// .build(); +// +// try { +// FormulaPO formulaPO = getSalaryFormulaService(user).save(saveParam); +// itemPO.setFormulaId(formulaPO.getId()); +// getSalaryItemMapper().updateIgnoreNull(itemPO); +// } catch (Exception e) { +// ImportExcelResponse.Error error = ImportExcelResponse.Error.builder().message(String.format("%s“%s”的公式设置有误:%s", rowIndex, itemPO.getName(), e.getMessage())).build(); +// response.setSuccessCount(response.getSuccessCount() - 1); +// response.setErrorCount(response.getErrorCount() + 1); +// response.getErrorData().add(error); +// } +// } +// return response; + } catch (IOException e) { + e.printStackTrace(); + } finally { + IOUtils.closeQuietly(fileInputStream); + } } } From 6532225da3d05294cf055c1d88deceacb7dd84cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 8 Aug 2024 18:04:50 +0800 Subject: [PATCH 019/124] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/config/SalaryConfig.java | 2 +- .../service/SalaryArchiveItemService.java | 2 ++ .../salary/service/SalaryFormulaService.java | 3 +- .../salary/service/SalaryItemService.java | 2 ++ .../impl/SalaryArchiveItemServiceImpl.java | 7 ++++ .../impl/SalaryFormulaServiceImpl.java | 30 +++++++++++++++- .../service/impl/SalaryItemServiceImpl.java | 34 ++++++++++++++++--- .../wrapper/SalarySystemConfigWrapper.java | 19 ++++++++--- 8 files changed, 86 insertions(+), 13 deletions(-) diff --git a/src/com/engine/salary/entity/config/SalaryConfig.java b/src/com/engine/salary/entity/config/SalaryConfig.java index 8958b03f9..5203a2ed2 100644 --- a/src/com/engine/salary/entity/config/SalaryConfig.java +++ b/src/com/engine/salary/entity/config/SalaryConfig.java @@ -40,7 +40,7 @@ public class SalaryConfig { //字段管理 @XStreamAlias("ArchiveFieldConfig") - private ArchiveFieldConfig archiveFieldConfigs; + private ArchiveFieldConfig archiveFieldConfig; //扣缴义务人 @XStreamImplicit diff --git a/src/com/engine/salary/service/SalaryArchiveItemService.java b/src/com/engine/salary/service/SalaryArchiveItemService.java index 573aa0aa3..0489b7ce6 100644 --- a/src/com/engine/salary/service/SalaryArchiveItemService.java +++ b/src/com/engine/salary/service/SalaryArchiveItemService.java @@ -160,4 +160,6 @@ public interface SalaryArchiveItemService { ArchiveFieldConfig getConfig(); + + void parseConfig(ArchiveFieldConfig config); } diff --git a/src/com/engine/salary/service/SalaryFormulaService.java b/src/com/engine/salary/service/SalaryFormulaService.java index 2fbe3f3d4..56e287ea9 100644 --- a/src/com/engine/salary/service/SalaryFormulaService.java +++ b/src/com/engine/salary/service/SalaryFormulaService.java @@ -58,5 +58,6 @@ public interface SalaryFormulaService { void update(FormulaPO formulaPO); - FormluaConfig getFormluaConfig(); + FormluaConfig getConfig(); + void parseConfig(FormluaConfig config); } diff --git a/src/com/engine/salary/service/SalaryItemService.java b/src/com/engine/salary/service/SalaryItemService.java index b2edbbc7f..e10090439 100644 --- a/src/com/engine/salary/service/SalaryItemService.java +++ b/src/com/engine/salary/service/SalaryItemService.java @@ -153,6 +153,7 @@ public interface SalaryItemService { void syncSalaryItemToSalarySobItem(SyncSalaryItemParam syncSalaryItemParam); SalaryItemAllConfig getConfig(); + void parseConfig(SalaryItemAllConfig salaryItemConfig); List getConfig(SalaryItemExportParam param); @@ -165,4 +166,5 @@ public interface SalaryItemService { XSSFWorkbook export(SalaryItemExportParam param); XSSFWorkbook downloadTemplate(SalaryItemDownloadTemplateParam param); + } diff --git a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java index 74ae1de51..3bc93be56 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java @@ -744,4 +744,11 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi return ArchiveFieldConfig.builder().salaryItems(salaryItemPOList).build(); } + @Override + public void parseConfig(ArchiveFieldConfig config) { + + Optional.ofNullable(config.getSalaryItems()).orElse(new ArrayList<>()) + .forEach(); + } + } diff --git a/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java b/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java index 9a32da966..3da81da93 100644 --- a/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java @@ -20,6 +20,7 @@ import com.engine.salary.service.FormulaRunService; import com.engine.salary.service.RemoteExcelService; import com.engine.salary.service.SalaryFormulaService; import com.engine.salary.util.JsonUtil; +import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.valid.ValidUtil; import com.google.common.collect.Lists; @@ -403,9 +404,36 @@ public class SalaryFormulaServiceImpl extends Service implements SalaryFormulaSe } @Override - public FormluaConfig getFormluaConfig() { + public FormluaConfig getConfig() { List formulaPOS = getFormulaMapper().listAll(); List formulaVars = getFormulaVarMapper().listAll(); return FormluaConfig.builder().formulas(formulaPOS).formulaVars(formulaVars).build(); } + + @Override + public void parseConfig(FormluaConfig config) { + List formulaPOS = getFormulaMapper().listAll(); + Set formulas = SalaryEntityUtil.properties(formulaPOS, FormulaPO::getId); + + Optional.ofNullable(config.getFormulas()) + .orElse(new ArrayList<>()) + .forEach(formulaPO -> { + Long id = formulaPO.getId(); + if (!formulas.contains(id)) { + getFormulaMapper().insertIgnoreNull(formulaPO); + } + }); + + List formulaVarPOs = getFormulaVarMapper().listAll(); + Set formulaVars = SalaryEntityUtil.properties(formulaVarPOs, FormulaVar::getId); + Optional.ofNullable(config.getFormulaVars()) + .orElse(new ArrayList<>()) + .forEach(po -> { + Long id = po.getId(); + if (!formulaVars.contains(id)) { + getFormulaVarMapper().insertIgnoreNull(po); + } + }); + + } } diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index 85675ca8f..b6e851a91 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -495,11 +495,6 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService } } - @Override - public SalaryItemAllConfig getConfig() { - List salaryItemPOList = listByParam(SalaryItemSearchParam.builder().useInEmployeeSalary(0).build()); - return SalaryItemAllConfig.builder().salaryItems(salaryItemPOList).build(); - } @Data @Builder @@ -772,4 +767,33 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService } return ExcelUtil.genWorkbookV2(rows, "薪资项目"); } + + @Override + public SalaryItemAllConfig getConfig() { + List salaryItemPOList = listByParam(SalaryItemSearchParam.builder().useInEmployeeSalary(0).build()); + return SalaryItemAllConfig.builder().salaryItems(salaryItemPOList).build(); + } + + @Override + public void parseConfig(SalaryItemAllConfig salaryItemConfig) { + List salaryItemPOList = listAll(); + Set ids = SalaryEntityUtil.properties(salaryItemPOList, SalaryItemPO::getId); + Set names = SalaryEntityUtil.properties(salaryItemPOList, SalaryItemPO::getName); + Set codes = SalaryEntityUtil.properties(salaryItemPOList, SalaryItemPO::getCode); + + Optional.ofNullable(salaryItemConfig.getSalaryItems()) + .orElse(new ArrayList<>()) + .forEach(itemPO -> { + //todo 异常提示 + if (ids.contains(itemPO.getId())) { + + }else if(names.contains(itemPO.getName())){ + + }else if(codes.contains(itemPO.getCode())){ + + }else { + getSalaryItemMapper().insertIgnoreNull(itemPO); + } + }) + } } diff --git a/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java b/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java index 9da1343ea..764abe18d 100644 --- a/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java @@ -36,7 +36,6 @@ import weaver.hrm.User; import java.io.*; import java.nio.charset.StandardCharsets; -import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -205,14 +204,14 @@ public class SalarySystemConfigWrapper extends Service { SalaryConfig salaryConfig = new SalaryConfig(); - FormluaConfig formluaConfig = getSalaryFormulaService(user).getFormluaConfig(); + FormluaConfig formluaConfig = getSalaryFormulaService(user).getConfig(); salaryConfig.setFormluaConfig(formluaConfig); SalaryItemAllConfig salaryItemConfig = getSalaryItemService(user).getConfig(); salaryConfig.setSalaryItemConfig(salaryItemConfig); ArchiveFieldConfig archiveFieldConfig = getSalaryArchiveItemService(user).getConfig(); - salaryConfig.setArchiveFieldConfigs(archiveFieldConfig); + salaryConfig.setArchiveFieldConfig(archiveFieldConfig); List taxAgentConfigs = getTaxAgentService(user).getAllConfig(); salaryConfig.setTaxAgentConfigs(taxAgentConfigs); @@ -221,7 +220,6 @@ public class SalarySystemConfigWrapper extends Service { } public void uploadConfig(uploadConfigParam param) { - Date now = new Date(); InputStream fileInputStream = null; try { fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); @@ -234,7 +232,18 @@ public class SalarySystemConfigWrapper extends Service { } SalaryConfig config = XStreamUtil.unmarshal(SalaryConfig.class, xml.toString()); - System.out.println(config); + + FormluaConfig formluaConfig = config.getFormluaConfig(); + getSalaryFormulaService(user).parseConfig(formluaConfig); + + SalaryItemAllConfig salaryItemConfig = config.getSalaryItemConfig(); + getSalaryItemService(user).parseConfig(salaryItemConfig); + + ArchiveFieldConfig archiveFieldConfig = config.getArchiveFieldConfig(); + getSalaryArchiveItemService(user).parseConfig(archiveFieldConfig); + + List taxAgentConfigs = config.getTaxAgentConfigs(); + // List configs = ExcelParseHelper.parse2Map(fileInputStream, SalaryItemExcelConfig.class, 0, 1, 13, EXCEL_TYPE_XLSX); // From dd257ec53e700a668f02aeffc608d60dc1d87930 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 9 Aug 2024 09:22:27 +0800 Subject: [PATCH 020/124] =?UTF-8?q?xml=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/config/SalaryConfig.java | 4 + .../salarysob/config/SalarySobConfig.java | 2 +- .../entity/salarysob/po/SalarySobPO.java | 6 +- .../taxagent/config/TaxAgentConfig.java | 33 +--- .../entity/taxagent/po/TaxAgentBasePO.java | 18 ++ .../salary/entity/taxagent/po/TaxAgentPO.java | 35 +++- .../salary/service/SalarySobService.java | 2 + .../salary/service/TaxAgentBaseService.java | 4 + .../salary/service/TaxAgentService.java | 4 +- .../impl/SalaryArchiveItemServiceImpl.java | 26 ++- .../service/impl/SalaryItemServiceImpl.java | 2 +- .../service/impl/SalarySobServiceImpl.java | 55 ++++++ .../service/impl/TaxAgentBaseServiceImpl.java | 29 ++++ .../service/impl/TaxAgentServiceImpl.java | 49 ++++-- .../wrapper/SalarySystemConfigWrapper.java | 162 ++---------------- 15 files changed, 230 insertions(+), 201 deletions(-) diff --git a/src/com/engine/salary/entity/config/SalaryConfig.java b/src/com/engine/salary/entity/config/SalaryConfig.java index 5203a2ed2..c1bba915d 100644 --- a/src/com/engine/salary/entity/config/SalaryConfig.java +++ b/src/com/engine/salary/entity/config/SalaryConfig.java @@ -4,6 +4,7 @@ import com.engine.salary.entity.salaryarchive.config.ArchiveFieldConfig; import com.engine.salary.entity.salaryformula.config.FormluaConfig; import com.engine.salary.entity.salaryitem.config.SalaryItemAllConfig; import com.engine.salary.entity.taxagent.config.TaxAgentConfig; +import com.engine.salary.entity.taxagent.po.TaxAgentBasePO; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamImplicit; import lombok.AllArgsConstructor; @@ -42,6 +43,9 @@ public class SalaryConfig { @XStreamAlias("ArchiveFieldConfig") private ArchiveFieldConfig archiveFieldConfig; + @XStreamAlias("TaxAgentBaseConfig") + private TaxAgentBasePO taxAgentBaseConfig; + //扣缴义务人 @XStreamImplicit private List taxAgentConfigs; diff --git a/src/com/engine/salary/entity/salarysob/config/SalarySobConfig.java b/src/com/engine/salary/entity/salarysob/config/SalarySobConfig.java index 12d0455c8..b367cc5cf 100644 --- a/src/com/engine/salary/entity/salarysob/config/SalarySobConfig.java +++ b/src/com/engine/salary/entity/salarysob/config/SalarySobConfig.java @@ -17,7 +17,7 @@ import java.util.List; @XStreamAlias("SalarySobConfig") public class SalarySobConfig { - @XStreamAlias("salarySob") + @XStreamAlias("SalarySob") private SalarySobPO salarySob; @XStreamImplicit diff --git a/src/com/engine/salary/entity/salarysob/po/SalarySobPO.java b/src/com/engine/salary/entity/salarysob/po/SalarySobPO.java index b75eb5976..231d6f866 100644 --- a/src/com/engine/salary/entity/salarysob/po/SalarySobPO.java +++ b/src/com/engine/salary/entity/salarysob/po/SalarySobPO.java @@ -4,6 +4,7 @@ import com.engine.hrmelog.annotation.ElogTransform; import com.engine.salary.util.valid.Compare; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; +import com.thoughtworks.xstream.annotations.XStreamOmitField; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -23,7 +24,7 @@ import java.util.Date; @AllArgsConstructor @ElogTransform( name="薪资账套" ) //hrsa_salary_sob -@XStreamAlias("SalarySobPO") +@XStreamAlias("SalarySob") public class SalarySobPO { /** @@ -31,8 +32,7 @@ public class SalarySobPO { */ @ElogTransform( name="主键" ) @Compare - @XStreamAlias("id") - @XStreamAsAttribute + @XStreamOmitField private Long id; /** diff --git a/src/com/engine/salary/entity/taxagent/config/TaxAgentConfig.java b/src/com/engine/salary/entity/taxagent/config/TaxAgentConfig.java index d22426bde..be17791cd 100644 --- a/src/com/engine/salary/entity/taxagent/config/TaxAgentConfig.java +++ b/src/com/engine/salary/entity/taxagent/config/TaxAgentConfig.java @@ -1,8 +1,8 @@ package com.engine.salary.entity.taxagent.config; import com.engine.salary.entity.salarysob.config.SalarySobConfig; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.thoughtworks.xstream.annotations.XStreamAlias; -import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import com.thoughtworks.xstream.annotations.XStreamImplicit; import lombok.AllArgsConstructor; import lombok.Builder; @@ -18,35 +18,8 @@ import java.util.List; @XStreamAlias("TaxAgentConfig") public class TaxAgentConfig { - /** - * 主键id - */ - @XStreamAlias("id") - @XStreamAsAttribute - private Long id; - - /** - * 名称 - */ - @XStreamAlias("name") - @XStreamAsAttribute - private String name; - - - /** - * 备注 - */ - @XStreamAlias("description") - @XStreamAsAttribute - private String description; - - - /** - * 排序 - */ - @XStreamAlias("sortedIndex") - @XStreamAsAttribute - private Integer sortedIndex; + @XStreamAlias("TaxAgent") + private TaxAgentPO taxAgent; //薪资账套 @XStreamImplicit diff --git a/src/com/engine/salary/entity/taxagent/po/TaxAgentBasePO.java b/src/com/engine/salary/entity/taxagent/po/TaxAgentBasePO.java index 6930031f9..58e02c10e 100644 --- a/src/com/engine/salary/entity/taxagent/po/TaxAgentBasePO.java +++ b/src/com/engine/salary/entity/taxagent/po/TaxAgentBasePO.java @@ -1,5 +1,7 @@ package com.engine.salary.entity.taxagent.po; +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -21,41 +23,57 @@ import java.util.Date; @NoArgsConstructor @AllArgsConstructor //hrsa_tax_agent_base") +@XStreamAlias("TaxAgentBase") public class TaxAgentBasePO { /** * 主键id */ + @XStreamAlias("id") + @XStreamAsAttribute private Long id; /** * 分权开关 */ + @XStreamAlias("devolutionStatus") + @XStreamAsAttribute private Integer devolutionStatus; /** * 租户key */ + @XStreamAlias("tenantKey") + @XStreamAsAttribute private String tenantKey; /** * 创建人id */ + @XStreamAlias("creator") + @XStreamAsAttribute private Long creator; /** * 是否删除 */ + @XStreamAlias("deleteType") + @XStreamAsAttribute private Integer deleteType; /** * 创建时间 */ + @XStreamAlias("createTime") + @XStreamAsAttribute private Date createTime; /** * 更新时间 */ + @XStreamAlias("updateTime") + @XStreamAsAttribute private Date updateTime; + private Collection ids; } diff --git a/src/com/engine/salary/entity/taxagent/po/TaxAgentPO.java b/src/com/engine/salary/entity/taxagent/po/TaxAgentPO.java index 819bf3aaf..65b688baa 100644 --- a/src/com/engine/salary/entity/taxagent/po/TaxAgentPO.java +++ b/src/com/engine/salary/entity/taxagent/po/TaxAgentPO.java @@ -1,6 +1,9 @@ package com.engine.salary.entity.taxagent.po; import com.engine.hrmelog.annotation.ElogTransform; +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; +import com.thoughtworks.xstream.annotations.XStreamOmitField; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -24,64 +27,86 @@ import java.util.Date; //hrsa_tax_agent") //个税扣缴义务人表") @ElogTransform(name = "个税扣缴义务人") +@XStreamAlias("TaxAgent") public class TaxAgentPO { /** * 主键id */ @ElogTransform(name = "主键id") + @XStreamOmitField private Long id; /** * 名称 */ @ElogTransform(name = "名称") + @XStreamAlias("name") + @XStreamAsAttribute private String name; /** * 代缴机构 */ // @ElogTransform(name = "代缴机构") + @XStreamAlias("paymentAgency") + @XStreamAsAttribute private String paymentAgency; + + /** + * 排序 + */ + @XStreamAlias("sortedIndex") + @XStreamAsAttribute + private Integer sortedIndex; + /** * 备注 */ @ElogTransform(name = "备注") + @XStreamAlias("description") + @XStreamAsAttribute private String description; /** * 租户key */ + @XStreamAlias("tenantKey") + @XStreamAsAttribute private String tenantKey; /** * 创建人id */ @ElogTransform(name = "创建人id") + @XStreamAlias("creator") + @XStreamAsAttribute private Long creator; /** * 是否删除 */ + @XStreamAlias("deleteType") + @XStreamAsAttribute private Integer deleteType; /** * 创建时间 */ @ElogTransform(name = "创建时间") + @XStreamAlias("createTime") + @XStreamAsAttribute private Date createTime; /** * 更新时间 */ - @ElogTransform(name = "更新时间") + @ElogTransform(name = "updateTime") + @XStreamAlias("updateTime") + @XStreamAsAttribute private Date updateTime; - /** - * 排序 - */ - private Integer sortedIndex; private Collection ids; } diff --git a/src/com/engine/salary/service/SalarySobService.java b/src/com/engine/salary/service/SalarySobService.java index cd2689cc0..7fed5ee31 100644 --- a/src/com/engine/salary/service/SalarySobService.java +++ b/src/com/engine/salary/service/SalarySobService.java @@ -157,4 +157,6 @@ public interface SalarySobService { List listByTaxAgentIds(Collection taxAgentIds); List getConfig(Long taxAgentId); + + void parseConfig(Long taxAgentId, List salarySobConfigs); } diff --git a/src/com/engine/salary/service/TaxAgentBaseService.java b/src/com/engine/salary/service/TaxAgentBaseService.java index ab795d52c..6c70f4e4a 100644 --- a/src/com/engine/salary/service/TaxAgentBaseService.java +++ b/src/com/engine/salary/service/TaxAgentBaseService.java @@ -34,4 +34,8 @@ public interface TaxAgentBaseService { * @return */ String save(TaxAgentSaveBaseParam saveBaseParam); + + TaxAgentBasePO getConfig(); + + void parseConfig(TaxAgentBasePO config); } diff --git a/src/com/engine/salary/service/TaxAgentService.java b/src/com/engine/salary/service/TaxAgentService.java index 65ac2c77c..db580e8a0 100644 --- a/src/com/engine/salary/service/TaxAgentService.java +++ b/src/com/engine/salary/service/TaxAgentService.java @@ -261,5 +261,7 @@ public interface TaxAgentService { Collection listEmployeeIdsInTaxAgent(Long taxAgentId); - List getAllConfig(); + List getConfig(); + + void parseConfig(List configs); } diff --git a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java index 3bc93be56..a40d8f8eb 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java @@ -1,5 +1,6 @@ package com.engine.salary.service.impl; +import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.SalaryArchiveBiz; @@ -23,6 +24,7 @@ import com.engine.salary.enums.salaryarchive.SalaryArchiveItemAdjustReasonEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.archive.SalaryArchiveItemMapper; +import com.engine.salary.mapper.salaryitem.SalaryItemMapper; import com.engine.salary.service.*; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; @@ -60,6 +62,10 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi return MapperProxyFactory.getProxy(SalaryArchiveItemMapper.class); } + private SalaryItemMapper getSalaryItemMapper() { + return SqlProxyHandle.getProxy(SalaryItemMapper.class); + } + @Override public SalaryArchiveItemPO getById(Long salaryArchiveItemId) { @@ -746,9 +752,25 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi @Override public void parseConfig(ArchiveFieldConfig config) { + List salaryItemPOList = getSalaryItemService(user).listAll(); + Set ids = SalaryEntityUtil.properties(salaryItemPOList, SalaryItemPO::getId); + Set names = SalaryEntityUtil.properties(salaryItemPOList, SalaryItemPO::getName); + Set codes = SalaryEntityUtil.properties(salaryItemPOList, SalaryItemPO::getCode); - Optional.ofNullable(config.getSalaryItems()).orElse(new ArrayList<>()) - .forEach(); + Optional.ofNullable(config.getSalaryItems()) + .orElse(new ArrayList<>()) + .forEach(itemPO -> { + //todo 异常提示 + if (ids.contains(itemPO.getId())) { + + }else if(names.contains(itemPO.getName())){ + + }else if(codes.contains(itemPO.getCode())){ + + }else { + getSalaryItemMapper().insertIgnoreNull(itemPO); + } + }); } } diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index b6e851a91..04ca27940 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -794,6 +794,6 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService }else { getSalaryItemMapper().insertIgnoreNull(itemPO); } - }) + }); } } diff --git a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java index bc10a146b..06af17fad 100644 --- a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java @@ -823,6 +823,61 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { }).collect(Collectors.toList()); } + @Override + public void parseConfig(Long taxAgentId, List salarySobConfigs) { + long uid = user.getUID(); + List salarySobPOS = listByTaxAgentId(taxAgentId); + Map sobPOMap = SalaryEntityUtil.convert2Map(salarySobPOS, SalarySobPO::getName); + + Optional.ofNullable(salarySobConfigs) + .orElse(new ArrayList<>()) + .forEach(salarySobConfig -> { + SalarySobPO salarySobPO = salarySobConfig.getSalarySob(); + String sobPOName = salarySobPO.getName(); + if (sobPOMap.containsKey(sobPOName)) { + salarySobPO = sobPOMap.get(sobPOName); + } else { + salarySobPO.setCreator(uid); + getSalarySobMapper().insertIgnoreNull(salarySobPO); + } + + List salarySobItems = salarySobConfig.getSalarySobItems(); + for (SalarySobItemPO salarySobItem : salarySobItems) { + salarySobItem.setSalarySobId(salarySobPO.getId()); + salarySobItem.setCreator(uid); + } + getSalarySobItemService(user).batchSave(salarySobItems); + + List salarySobEmpFields = salarySobConfig.getSalarySobEmpFields(); + for (SalarySobEmpFieldPO salarySobEmpField : salarySobEmpFields) { + salarySobEmpField.setSalarySobId(salarySobPO.getId()); + salarySobEmpField.setCreator(uid); + } + getSalarySobEmpFieldService(user).batchSave(salarySobEmpFields); + + List salarySobItemGroups = salarySobConfig.getSalarySobItemGroups(); + for (SalarySobItemGroupPO salarySobItemGroup : salarySobItemGroups) { + salarySobItemGroup.setSalarySobId(salarySobPO.getId()); + salarySobItemGroup.setCreator(uid); + } + getSalarySobItemGroupService(user).batchSave(salarySobItemGroups); + + List salarySobBackItems = salarySobConfig.getSalarySobBackItems(); + for (SalarySobBackItemPO salarySobBackItem : salarySobBackItems) { + salarySobBackItem.setSalarySobId(salarySobPO.getId()); + salarySobBackItem.setCreator(uid); + } + getSalarySobBackItemService(user).batchInsert(salarySobBackItems); + + List salarySobAdjustRules = salarySobConfig.getSalarySobAdjustRules(); + for (SalarySobAdjustRulePO salarySobAdjustRule : salarySobAdjustRules) { + salarySobAdjustRule.setSalarySobId(salarySobPO.getId()); + salarySobAdjustRule.setCreator(uid); + } + getSalarySobAdjustRuleService(user).batchSave(salarySobAdjustRules); + }); + } + public List filterByAdmin(List salarySobPOS) { long employeeId = user.getUID(); diff --git a/src/com/engine/salary/service/impl/TaxAgentBaseServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentBaseServiceImpl.java index d31a2a6de..b851cbeab 100644 --- a/src/com/engine/salary/service/impl/TaxAgentBaseServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentBaseServiceImpl.java @@ -95,6 +95,35 @@ public class TaxAgentBaseServiceImpl extends Service implements TaxAgentBaseServ return StringUtils.EMPTY; } + @Override + public TaxAgentBasePO getConfig() { + Date now = new Date(); + TaxAgentBasePO baseInfo = getBaseInfo(); + if (baseInfo == null) { + baseInfo = TaxAgentBasePO.builder() + .id(IdGenerator.generate()) + .devolutionStatus(0) + .createTime(now) + .updateTime(now) + .creator((long) user.getUID()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build(); + } + return baseInfo; + } + + @Override + public void parseConfig(TaxAgentBasePO config) { + TaxAgentBasePO baseInfo = getBaseInfo(); + if (baseInfo == null) { + config.setCreator((long) user.getUID()); + getTaxAgentBaseMapper().insertIgnoreNull(config); + }else { + baseInfo.setDevolutionStatus(config.getDevolutionStatus()); + getTaxAgentBaseMapper().updateIgnoreNull(baseInfo); + } + } + /** * 检查是否有未归档数据 * diff --git a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java index 9c004b049..4afc39341 100644 --- a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java @@ -475,7 +475,7 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { getTaxAgentMapper().deleteByIds(ids); // 记录日志 - taxAgents.forEach(e ->{ + taxAgents.forEach(e -> { LoggerContext loggerContext = new LoggerContext<>(); loggerContext.setUser(user); loggerContext.setTargetId(e.getId().toString()); @@ -504,12 +504,12 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { } // 被社保福利档案引用 List socialByPaymentOrganization = getInsuranceBaseInfoMapper().getSocialByPaymentOrganization(id); - if(CollectionUtils.isNotEmpty(socialByPaymentOrganization)){ + if (CollectionUtils.isNotEmpty(socialByPaymentOrganization)) { throw new SalaryRunTimeException("存在社保福利档案引用"); } // 被社保福利台账引用 List insuranceArchiveList = getInsuranceAccountBatchMapper().list(InsuranceAccountBatchParam.builder().taxAgents(Collections.singletonList(id)).build()); - if(CollectionUtils.isNotEmpty(insuranceArchiveList)){ + if (CollectionUtils.isNotEmpty(insuranceArchiveList)) { throw new SalaryRunTimeException("存在社保福利台账引用"); } //被社保福利档案引用 @@ -796,22 +796,47 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { } - @Override public Collection listEmployeeIdsInTaxAgent(Long taxAgentId) { - List taxAgentEmpPOS = getTaxAgentEmpService(user).listByTaxAgentIds(Collections.singletonList(taxAgentId),UseEmployeeTypeEnum.ALL); + List taxAgentEmpPOS = getTaxAgentEmpService(user).listByTaxAgentIds(Collections.singletonList(taxAgentId), UseEmployeeTypeEnum.ALL); return SalaryEntityUtil.properties(taxAgentEmpPOS, TaxAgentEmpPO::getEmployeeId); } @Override - public List getAllConfig() { - List allConfig = getTaxAgentMapper().getAllConfig(); - allConfig.forEach(config->{ - List sobConfigs = getSalarySobService(user).getConfig(config.getId()); - config.setSalarySobConfigs(sobConfigs); - }); - return allConfig; + public List getConfig() { + List taxAgentPOS = getTaxAgentMapper().listAll(); + return taxAgentPOS.stream() + .map(taxAgentPO -> { + List sobConfigs = getSalarySobService(user).getConfig(taxAgentPO.getId()); + return TaxAgentConfig.builder().taxAgent(taxAgentPO).salarySobConfigs(sobConfigs).build(); + }) + .collect(Collectors.toList()); + } + + @Override + public void parseConfig(List configs) { + List taxAgentPOS = listAll(); + Map agentPOMap = SalaryEntityUtil.convert2Map(taxAgentPOS, TaxAgentPO::getName); + + Optional.ofNullable(configs) + .orElse(new ArrayList<>()) + .forEach(config -> { + TaxAgentPO taxAgent = config.getTaxAgent(); + String name = taxAgent.getName(); + if (agentPOMap.containsKey(name)) { + //存在扣缴义务人 + taxAgent = agentPOMap.get(name); + } else { + //新增扣缴义务人 + taxAgent.setId(null); + taxAgent.setCreator((long) user.getUID()); + getTaxAgentMapper().insertIgnoreNull(taxAgent); + } + + getSalarySobService(user).parseConfig(taxAgent.getId(), config.getSalarySobConfigs()); + + }); } diff --git a/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java b/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java index 764abe18d..eb25f376b 100644 --- a/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java @@ -7,14 +7,9 @@ import com.engine.salary.entity.salaryarchive.config.ArchiveFieldConfig; import com.engine.salary.entity.salaryformula.config.FormluaConfig; import com.engine.salary.entity.salaryitem.config.SalaryItemAllConfig; import com.engine.salary.entity.taxagent.config.TaxAgentConfig; -import com.engine.salary.service.SalaryArchiveItemService; -import com.engine.salary.service.SalaryFormulaService; -import com.engine.salary.service.SalaryItemService; -import com.engine.salary.service.TaxAgentService; -import com.engine.salary.service.impl.SalaryArchiveItemServiceImpl; -import com.engine.salary.service.impl.SalaryFormulaServiceImpl; -import com.engine.salary.service.impl.SalaryItemServiceImpl; -import com.engine.salary.service.impl.TaxAgentServiceImpl; +import com.engine.salary.entity.taxagent.po.TaxAgentBasePO; +import com.engine.salary.service.*; +import com.engine.salary.service.impl.*; import com.engine.salary.sys.entity.param.*; import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.sys.entity.vo.AppSettingVO; @@ -70,6 +65,10 @@ public class SalarySystemConfigWrapper extends Service { return ServiceUtil.getService(SalaryFormulaServiceImpl.class, user); } + private TaxAgentBaseService getTaxAgentBaseService(User user) { + return ServiceUtil.getService(TaxAgentBaseServiceImpl.class, user); + } + public Map info() { BaseBean baseBean = new BaseBean(); String log = baseBean.getPropValue("hrmSalary", "log"); @@ -213,7 +212,10 @@ public class SalarySystemConfigWrapper extends Service { ArchiveFieldConfig archiveFieldConfig = getSalaryArchiveItemService(user).getConfig(); salaryConfig.setArchiveFieldConfig(archiveFieldConfig); - List taxAgentConfigs = getTaxAgentService(user).getAllConfig(); + TaxAgentBasePO taxAgentBaseConfig = getTaxAgentBaseService(user).getConfig(); + salaryConfig.setTaxAgentBaseConfig(taxAgentBaseConfig); + + List taxAgentConfigs = getTaxAgentService(user).getConfig(); salaryConfig.setTaxAgentConfigs(taxAgentConfigs); return salaryConfig; @@ -233,148 +235,16 @@ public class SalarySystemConfigWrapper extends Service { SalaryConfig config = XStreamUtil.unmarshal(SalaryConfig.class, xml.toString()); - FormluaConfig formluaConfig = config.getFormluaConfig(); - getSalaryFormulaService(user).parseConfig(formluaConfig); + getSalaryFormulaService(user).parseConfig(config.getFormluaConfig()); - SalaryItemAllConfig salaryItemConfig = config.getSalaryItemConfig(); - getSalaryItemService(user).parseConfig(salaryItemConfig); + getSalaryItemService(user).parseConfig(config.getSalaryItemConfig()); - ArchiveFieldConfig archiveFieldConfig = config.getArchiveFieldConfig(); - getSalaryArchiveItemService(user).parseConfig(archiveFieldConfig); + getSalaryArchiveItemService(user).parseConfig(config.getArchiveFieldConfig()); - List taxAgentConfigs = config.getTaxAgentConfigs(); + getTaxAgentBaseService(user).parseConfig(config.getTaxAgentBaseConfig()); + getTaxAgentService(user).parseConfig(config.getTaxAgentConfigs()); -// List configs = ExcelParseHelper.parse2Map(fileInputStream, SalaryItemExcelConfig.class, 0, 1, 13, EXCEL_TYPE_XLSX); -// -// // 错误excel内容 -// ImportExcelResponse response = ImportExcelResponse.builder().totalCount(configs.size()).successCount(configs.size()).errorCount(0).errorData(new ArrayList<>()).build(); -// -// List sysSalaryItemPOS = sysSalaryItemBiz.listAll(); -// Set sysItems = SalaryEntityUtil.properties(sysSalaryItemPOS, SysSalaryItemPO::getName); -// -// List adds = new ArrayList<>(); -// List updates = new ArrayList<>(); -// Map> formulaItems = new HashMap<>(); -// for (int i = 0; i < configs.size(); i++) { -// String rowIndex = String.format("第%s行", i + 2); -// SalaryItemExcelConfig config = configs.get(i); -// String name = config.getName(); -// SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByDefaultLabel(config.getValueType()); -// SalaryDataTypeEnum salaryDataTypeEnum = SalaryDataTypeEnum.parseByValue(config.getDataType()); -// SalaryItemPO itemPO = getByName(name); -// if (itemPO == null) { -// -// if (sysItems.contains(name)) { -// ImportExcelResponse.Error error = ImportExcelResponse.Error.builder().message(String.format("%s“%s”的名称与系统名称冲突", rowIndex, name)).build(); -// response.setSuccessCount(response.getSuccessCount() - 1); -// response.setErrorCount(response.getErrorCount() + 1); -// response.getErrorData().add(error); -// continue; -// } -// -// itemPO = SalaryItemPO.builder() -// .id(IdGenerator.generate()) -// .code(IdGenerator.getUUID()) -// .name(name) -// .systemType(SalarySystemTypeEnum.CUSTOM.getValue()) -// .sysSalaryItemId(org.apache.commons.lang3.math.NumberUtils.LONG_ZERO) -// .useDefault(SalaryOnOffEnum.parseByDefaultLabel(config.getUseDefault()).getValue()) -// .useInEmployeeSalary(SalaryOnOffEnum.OFF.getValue()) -// .hideDefault(SalaryOnOffEnum.parseByDefaultLabel(config.getHideDefault()).getValue()) -// .roundingMode(SalaryRoundingModeEnum.parseByDefaultLabel(config.getRoundingMode()).getValue()) -// .pattern(NumberUtil.isNumber(config.getPattern()) ? Integer.parseInt(config.getPattern()) : 2) -// .valueType(salaryValueTypeEnum.getValue()) -// .dataType(salaryDataTypeEnum.getValue()) -// //后补 -// .formulaId(0L) -// .description(config.getDescription()) -// .canEdit(org.apache.commons.lang3.math.NumberUtils.INTEGER_ONE) -// .creator((long) user.getUID()) -// .deleteType(0) -// .createTime(now) -// .updateTime(now) -// .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) -// .sharedType(0) -// .taxAgentIds("") -// .sortedIndex(NumberUtil.isNumber(config.getSortedIndex()) ? Integer.parseInt(config.getSortedIndex()) : null) -// .width(NumberUtil.isNumber(config.getWidth()) ? Integer.parseInt(config.getWidth()) : null) -// .defaultValue(config.getDefaultValue()) -// .build(); -// adds.add(itemPO); -// } else { -// -// if (SalarySystemTypeEnum.parseByValue(itemPO.getSystemType()) == SalarySystemTypeEnum.SYSTEM) { -// ImportExcelResponse.Error error = ImportExcelResponse.Error.builder().message(String.format("%s“%s”是系统薪资项目不支持修改", rowIndex, name)).build(); -// response.setSuccessCount(response.getSuccessCount() - 1); -// response.setErrorCount(response.getErrorCount() + 1); -// response.getErrorData().add(error); -// continue; -// } -// -// itemPO.setUseDefault(SalaryOnOffEnum.parseByDefaultLabel(config.getUseDefault()).getValue()); -// itemPO.setHideDefault(SalaryOnOffEnum.parseByDefaultLabel(config.getHideDefault()).getValue()); -// itemPO.setRoundingMode(SalaryRoundingModeEnum.parseByDefaultLabel(config.getRoundingMode()).getValue()); -// itemPO.setPattern(NumberUtil.isNumber(config.getPattern()) ? Integer.parseInt(config.getPattern()) : 2); -// itemPO.setValueType(salaryValueTypeEnum.getValue()); -// itemPO.setDataType(salaryDataTypeEnum.getValue()); -// //后补 -// itemPO.setFormulaId(0L); -// itemPO.setDescription(config.getDescription()); -// itemPO.setUpdateTime(now); -// itemPO.setSortedIndex(NumberUtil.isNumber(config.getSortedIndex()) ? Integer.parseInt(config.getSortedIndex()) : null); -// itemPO.setWidth(NumberUtil.isNumber(config.getWidth()) ? Integer.parseInt(config.getWidth()) : null); -// itemPO.setDefaultValue(config.getDefaultValue()); -// updates.add(itemPO); -// } -// -// //解析公式 -// if (salaryValueTypeEnum == SalaryValueTypeEnum.FORMULA || salaryValueTypeEnum == SalaryValueTypeEnum.SQL) { -// Long id = itemPO.getId(); -// String formula = config.getFormula(); -// String sqlReturnKey = config.getSqlReturnKey(); -// Map map = new HashMap<>(); -// map.put("rowIndex", rowIndex); -// map.put("formula", formula); -// map.put("sqlReturnKey", sqlReturnKey); -// formulaItems.put(id, map); -// } -// } -// -// adds.forEach(getSalaryItemMapper()::insertIgnoreNull); -// updates.forEach(getSalaryItemMapper()::updateIgnoreNull); -// -// for (Long id : formulaItems.keySet()) { -// SalaryItemPO itemPO = getById(id); -// Map map = formulaItems.get(id); -// String rowIndex = map.get("rowIndex"); -// String formula = map.get("formula"); -// String sqlReturnKey = map.get("sqlReturnKey"); -// SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByValue(itemPO.getValueType()); -// SalaryDataTypeEnum salaryDataTypeEnum = SalaryDataTypeEnum.parseByValue(itemPO.getDataType()); -// SalaryFormulaSaveParam saveParam = SalaryFormulaSaveParam.builder() -// .name(itemPO.getName()) -// .module("salary") -// .useFor("salaryitem") -// .referenceType(salaryValueTypeEnum == SalaryValueTypeEnum.FORMULA ? ReferenceTypeEnum.FORMULA.getValue() : ReferenceTypeEnum.SQL.getValue()) -// .returnType(salaryDataTypeEnum == SalaryDataTypeEnum.STRING ? ReturnTypeEnum.STRING.getValue() : ReturnTypeEnum.NUMBER.getValue()) -// .validateType(salaryDataTypeEnum == SalaryDataTypeEnum.STRING ? ReturnTypeEnum.STRING.getValue() : ReturnTypeEnum.NUMBER.getValue()) -// .extendParam("{\"isCustomFunction\":\"0\",\"sqlReturnKey\":\"" + sqlReturnKey + "\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}") -// .formula(formula) -// .build(); -// -// try { -// FormulaPO formulaPO = getSalaryFormulaService(user).save(saveParam); -// itemPO.setFormulaId(formulaPO.getId()); -// getSalaryItemMapper().updateIgnoreNull(itemPO); -// } catch (Exception e) { -// ImportExcelResponse.Error error = ImportExcelResponse.Error.builder().message(String.format("%s“%s”的公式设置有误:%s", rowIndex, itemPO.getName(), e.getMessage())).build(); -// response.setSuccessCount(response.getSuccessCount() - 1); -// response.setErrorCount(response.getErrorCount() + 1); -// response.getErrorData().add(error); -// } -// } -// return response; } catch (IOException e) { e.printStackTrace(); } finally { From 75fb15928a735b590f70cce7e020d5d320e1c469 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 9 Aug 2024 10:21:40 +0800 Subject: [PATCH 021/124] =?UTF-8?q?=E6=B5=AE=E5=8A=A8=E8=96=AA=E9=85=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/DM/sql202408090103.sql | 42 ++ resource/sqlupgrade/GS/sql202408090103.sql | 42 ++ resource/sqlupgrade/JC/sql202408090103.sql | 42 ++ resource/sqlupgrade/Mysql/sql202408090103.sql | 43 ++ .../sqlupgrade/Oracle/sql202408090103.sql | 42 ++ resource/sqlupgrade/PG/sql202408090103.sql | 38 ++ .../sqlupgrade/SQLServer/sql202408090103.sql | 41 ++ resource/sqlupgrade/ST/sql202408090103.sql | 42 ++ .../salary/web/VariableArchiveController.java | 8 + .../salary/web/VariableItemController.java | 8 + .../salary/constant/SalaryItemConstant.java | 5 + .../datacollection/bo/VariableArchiveBO.java | 279 +++++++++ .../bo/VariableArchiveExcelBO.java | 297 +++++++++ .../dto/VariableArchiveItemDTO.java | 33 + .../dto/VariableArchiveListDTO.java | 87 +++ .../dto/VariableItemListDTO.java | 37 ++ .../VariableArchiveImportHandleParam.java | 98 +++ .../param/VariableArchiveQueryParam.java | 47 ++ .../param/VariableArchiveSaveParam.java | 35 ++ .../param/VariableItemQueryParam.java | 31 + .../param/VariableItemSaveParam.java | 41 ++ .../po/VariableArchiveItemPO.java | 76 +++ .../datacollection/po/VariableArchivePO.java | 49 ++ .../datacollection/po/VariableItemPO.java | 58 ++ .../salaryacct/bo/CalculateFormulaVarBO.java | 37 +- .../salaryacct/bo/SalaryAcctCalculateBO.java | 6 + .../SalaryFormulaReferenceEnum.java | 1 + .../VariableArchiveItemMapper.java | 87 +++ .../VariableArchiveItemMapper.xml | 349 +++++++++++ .../datacollection/VariableArchiveMapper.java | 81 +++ .../datacollection/VariableArchiveMapper.xml | 366 +++++++++++ .../datacollection/VariableItemMapper.java | 68 +++ .../datacollection/VariableItemMapper.xml | 210 +++++++ .../service/VariableArchiveItemService.java | 35 ++ .../service/VariableArchiveService.java | 72 +++ .../salary/service/VariableItemService.java | 66 ++ .../service/impl/RemoteExcelServiceImpl.java | 24 + .../impl/SalaryAcctCalculateServiceImpl.java | 13 +- .../impl/SalaryAcctResultServiceImpl.java | 7 + .../service/impl/SalaryItemServiceImpl.java | 1 + .../impl/VariableArchiveItemServiceImpl.java | 73 +++ .../impl/VariableArchiveServiceImpl.java | 567 ++++++++++++++++++ .../service/impl/VariableItemServiceImpl.java | 245 ++++++++ .../salary/web/VariableArchiveController.java | 276 +++++++++ .../salary/web/VariableItemController.java | 324 ++++++++++ .../wrapper/VariableArchiveWrapper.java | 190 ++++++ .../salary/wrapper/VariableItemWrapper.java | 75 +++ 47 files changed, 4692 insertions(+), 2 deletions(-) create mode 100644 resource/sqlupgrade/DM/sql202408090103.sql create mode 100644 resource/sqlupgrade/GS/sql202408090103.sql create mode 100644 resource/sqlupgrade/JC/sql202408090103.sql create mode 100644 resource/sqlupgrade/Mysql/sql202408090103.sql create mode 100644 resource/sqlupgrade/Oracle/sql202408090103.sql create mode 100644 resource/sqlupgrade/PG/sql202408090103.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202408090103.sql create mode 100644 resource/sqlupgrade/ST/sql202408090103.sql create mode 100644 src/com/api/salary/web/VariableArchiveController.java create mode 100644 src/com/api/salary/web/VariableItemController.java create mode 100644 src/com/engine/salary/entity/datacollection/bo/VariableArchiveBO.java create mode 100644 src/com/engine/salary/entity/datacollection/bo/VariableArchiveExcelBO.java create mode 100644 src/com/engine/salary/entity/datacollection/dto/VariableArchiveItemDTO.java create mode 100644 src/com/engine/salary/entity/datacollection/dto/VariableArchiveListDTO.java create mode 100644 src/com/engine/salary/entity/datacollection/dto/VariableItemListDTO.java create mode 100644 src/com/engine/salary/entity/datacollection/param/VariableArchiveImportHandleParam.java create mode 100644 src/com/engine/salary/entity/datacollection/param/VariableArchiveQueryParam.java create mode 100644 src/com/engine/salary/entity/datacollection/param/VariableArchiveSaveParam.java create mode 100644 src/com/engine/salary/entity/datacollection/param/VariableItemQueryParam.java create mode 100644 src/com/engine/salary/entity/datacollection/param/VariableItemSaveParam.java create mode 100644 src/com/engine/salary/entity/datacollection/po/VariableArchiveItemPO.java create mode 100644 src/com/engine/salary/entity/datacollection/po/VariableArchivePO.java create mode 100644 src/com/engine/salary/entity/datacollection/po/VariableItemPO.java create mode 100644 src/com/engine/salary/mapper/datacollection/VariableArchiveItemMapper.java create mode 100644 src/com/engine/salary/mapper/datacollection/VariableArchiveItemMapper.xml create mode 100644 src/com/engine/salary/mapper/datacollection/VariableArchiveMapper.java create mode 100644 src/com/engine/salary/mapper/datacollection/VariableArchiveMapper.xml create mode 100644 src/com/engine/salary/mapper/datacollection/VariableItemMapper.java create mode 100644 src/com/engine/salary/mapper/datacollection/VariableItemMapper.xml create mode 100644 src/com/engine/salary/service/VariableArchiveItemService.java create mode 100644 src/com/engine/salary/service/VariableArchiveService.java create mode 100644 src/com/engine/salary/service/VariableItemService.java create mode 100644 src/com/engine/salary/service/impl/VariableArchiveItemServiceImpl.java create mode 100644 src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java create mode 100644 src/com/engine/salary/service/impl/VariableItemServiceImpl.java create mode 100644 src/com/engine/salary/web/VariableArchiveController.java create mode 100644 src/com/engine/salary/web/VariableItemController.java create mode 100644 src/com/engine/salary/wrapper/VariableArchiveWrapper.java create mode 100644 src/com/engine/salary/wrapper/VariableItemWrapper.java diff --git a/resource/sqlupgrade/DM/sql202408090103.sql b/resource/sqlupgrade/DM/sql202408090103.sql new file mode 100644 index 000000000..c7f9f1c64 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202408090103.sql @@ -0,0 +1,42 @@ +CREATE TABLE hrsa_variable_archive ( + id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NULL , + salary_month DATE NULL, + create_time DATE NOT NULL, + update_time DATE NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type int NOT NULL, + tenant_key varchar2(10) NULL, + PRIMARY KEY (id) +); +/ + +CREATE TABLE hrsa_variable_archive_item ( + id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + variable_archive_id NUMBER(38,0) NOT NULL, + variable_item_id NUMBER(38,0) NOT NULL, + item_value varchar2(255) NULL , + create_time DATE NOT NULL , + update_time DATE NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type int NOT NULL , + tenant_key varchar2(10) NULL, + PRIMARY KEY (id) +); +/ + +CREATE TABLE hrsa_variable_item ( + id NUMBER(38,0) NOT NULL , + name varchar2(255) NOT NULL , + code varchar2(255) NOT NULL, + data_type varchar2(20) NULL, + create_time DATE NOT NULL, + update_time DATE NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type int NOT NULL, + tenant_key varchar2(10) NULL , + PRIMARY KEY (id) +); +/ + diff --git a/resource/sqlupgrade/GS/sql202408090103.sql b/resource/sqlupgrade/GS/sql202408090103.sql new file mode 100644 index 000000000..c7f9f1c64 --- /dev/null +++ b/resource/sqlupgrade/GS/sql202408090103.sql @@ -0,0 +1,42 @@ +CREATE TABLE hrsa_variable_archive ( + id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NULL , + salary_month DATE NULL, + create_time DATE NOT NULL, + update_time DATE NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type int NOT NULL, + tenant_key varchar2(10) NULL, + PRIMARY KEY (id) +); +/ + +CREATE TABLE hrsa_variable_archive_item ( + id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + variable_archive_id NUMBER(38,0) NOT NULL, + variable_item_id NUMBER(38,0) NOT NULL, + item_value varchar2(255) NULL , + create_time DATE NOT NULL , + update_time DATE NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type int NOT NULL , + tenant_key varchar2(10) NULL, + PRIMARY KEY (id) +); +/ + +CREATE TABLE hrsa_variable_item ( + id NUMBER(38,0) NOT NULL , + name varchar2(255) NOT NULL , + code varchar2(255) NOT NULL, + data_type varchar2(20) NULL, + create_time DATE NOT NULL, + update_time DATE NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type int NOT NULL, + tenant_key varchar2(10) NULL , + PRIMARY KEY (id) +); +/ + diff --git a/resource/sqlupgrade/JC/sql202408090103.sql b/resource/sqlupgrade/JC/sql202408090103.sql new file mode 100644 index 000000000..c7f9f1c64 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202408090103.sql @@ -0,0 +1,42 @@ +CREATE TABLE hrsa_variable_archive ( + id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NULL , + salary_month DATE NULL, + create_time DATE NOT NULL, + update_time DATE NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type int NOT NULL, + tenant_key varchar2(10) NULL, + PRIMARY KEY (id) +); +/ + +CREATE TABLE hrsa_variable_archive_item ( + id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + variable_archive_id NUMBER(38,0) NOT NULL, + variable_item_id NUMBER(38,0) NOT NULL, + item_value varchar2(255) NULL , + create_time DATE NOT NULL , + update_time DATE NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type int NOT NULL , + tenant_key varchar2(10) NULL, + PRIMARY KEY (id) +); +/ + +CREATE TABLE hrsa_variable_item ( + id NUMBER(38,0) NOT NULL , + name varchar2(255) NOT NULL , + code varchar2(255) NOT NULL, + data_type varchar2(20) NULL, + create_time DATE NOT NULL, + update_time DATE NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type int NOT NULL, + tenant_key varchar2(10) NULL , + PRIMARY KEY (id) +); +/ + diff --git a/resource/sqlupgrade/Mysql/sql202408090103.sql b/resource/sqlupgrade/Mysql/sql202408090103.sql new file mode 100644 index 000000000..e4640368e --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202408090103.sql @@ -0,0 +1,43 @@ +CREATE TABLE hrsa_variable_archive ( + id bigint NOT NULL, + employee_id bigint NULL , + salary_month datetime NULL, + create_time datetime NOT NULL, + update_time datetime NOT NULL, + creator bigint NOT NULL, + delete_type int NOT NULL, + tenant_key varchar(10) NULL, + PRIMARY KEY (id) +) +; + + + +CREATE TABLE hrsa_variable_archive_item ( + id bigint NOT NULL, + employee_id bigint NOT NULL, + variable_archive_id bigint NOT NULL, + variable_item_id bigint NOT NULL, + item_value varchar(255) NULL , + create_time datetime NOT NULL , + update_time datetime NOT NULL, + creator bigint NOT NULL, + delete_type int NOT NULL , + tenant_key varchar(10) NULL, + PRIMARY KEY (id) +) ; + + + +CREATE TABLE hrsa_variable_item ( + id bigint NOT NULL, + name varchar(255) NOT NULL, + code varchar(255) NOT NULL, + data_type varchar(20) NULL, + create_time datetime NOT NULL, + update_time datetime NOT NULL, + creator bigint NOT NULL, + delete_type int NOT NULL, + tenant_key varchar(10) NULL, + PRIMARY KEY (id) +); diff --git a/resource/sqlupgrade/Oracle/sql202408090103.sql b/resource/sqlupgrade/Oracle/sql202408090103.sql new file mode 100644 index 000000000..bac09a209 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202408090103.sql @@ -0,0 +1,42 @@ +CREATE TABLE hrsa_variable_archive ( + id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NULL , + salary_month DATE NULL, + create_time DATE NOT NULL, + update_time DATE NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type int NOT NULL, + tenant_key varchar2(10) NULL, + PRIMARY KEY (id) +) +/ + +CREATE TABLE hrsa_variable_archive_item ( + id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + variable_archive_id NUMBER(38,0) NOT NULL, + variable_item_id NUMBER(38,0) NOT NULL, + item_value varchar2(255) NULL , + create_time DATE NOT NULL , + update_time DATE NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type int NOT NULL , + tenant_key varchar2(10) NULL, + PRIMARY KEY (id) +) +/ + + +CREATE TABLE hrsa_variable_item ( + id NUMBER(38,0) NOT NULL , + name varchar2(255) NOT NULL , + code varchar2(255) NOT NULL, + data_type varchar2(20) NULL, + create_time DATE NOT NULL, + update_time DATE NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type int NOT NULL, + tenant_key varchar2(10) NULL , + PRIMARY KEY (id) +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202408090103.sql b/resource/sqlupgrade/PG/sql202408090103.sql new file mode 100644 index 000000000..fa8d111f1 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202408090103.sql @@ -0,0 +1,38 @@ +CREATE TABLE hrsa_variable_archive_item ( + id bigint NOT NULL, + employee_id bigint NOT NULL, + variable_archive_id bigint NOT NULL, + variable_item_id bigint NOT NULL, + item_value varchar(255) NULL, + create_time timestamp NOT NULL, + update_time timestamp NOT NULL, + creator bigint NOT NULL, + delete_type int NOT NULL, + tenant_key varchar(10) NULL, + PRIMARY KEY (id) +) ; + +CREATE TABLE hrsa_variable_archive ( + id bigint NOT NULL, + employee_id bigint NULL, + salary_month timestamp NULL , + create_time timestamp NOT NULL, + update_time timestamp NOT NULL, + creator bigint NOT NULL, + delete_type int NOT NULL, + tenant_key varchar(10) NULL, + PRIMARY KEY (id) +); + +CREATE TABLE hrsa_variable_item ( + id bigint NOT NULL, + name varchar(255) NOT NULL, + code varchar(255) NOT NULL, + data_type varchar(20)NULL , + create_time timestamp NOT NULL, + update_time timestamp NOT NULL, + creator bigint NOT NULL, + delete_type int NOT NULL, + tenant_key varchar(10) NULL, + PRIMARY KEY (id) +); \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202408090103.sql b/resource/sqlupgrade/SQLServer/sql202408090103.sql new file mode 100644 index 000000000..d6c193e59 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202408090103.sql @@ -0,0 +1,41 @@ +CREATE TABLE hrsa_variable_archive_item ( + id bigint NOT NULL, + employee_id bigint NOT NULL, + variable_archive_id bigint NOT NULL, + variable_item_id bigint NOT NULL, + item_value varchar(255) NULL, + create_time datetime NOT NULL, + update_time datetime NOT NULL, + creator bigint NOT NULL, + delete_type int NOT NULL, + tenant_key varchar(10) NULL, + PRIMARY KEY (id) +) +GO + +CREATE TABLE hrsa_variable_archive ( + id bigint NOT NULL, + employee_id bigint NULL, + salary_month datetime NULL , + create_time datetime NOT NULL, + update_time datetime NOT NULL, + creator bigint NOT NULL, + delete_type int NOT NULL, + tenant_key varchar(10) NULL, + PRIMARY KEY (id) +) +GO + +CREATE TABLE hrsa_variable_item ( + id bigint NOT NULL, + name varchar(255) NOT NULL, + code varchar(255) NOT NULL, + data_type varchar(20)NULL , + create_time datetime NOT NULL, + update_time datetime NOT NULL, + creator bigint NOT NULL, + delete_type int NOT NULL, + tenant_key varchar(10) NULL, + PRIMARY KEY (id) +) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql202408090103.sql b/resource/sqlupgrade/ST/sql202408090103.sql new file mode 100644 index 000000000..c7f9f1c64 --- /dev/null +++ b/resource/sqlupgrade/ST/sql202408090103.sql @@ -0,0 +1,42 @@ +CREATE TABLE hrsa_variable_archive ( + id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NULL , + salary_month DATE NULL, + create_time DATE NOT NULL, + update_time DATE NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type int NOT NULL, + tenant_key varchar2(10) NULL, + PRIMARY KEY (id) +); +/ + +CREATE TABLE hrsa_variable_archive_item ( + id NUMBER(38,0) NOT NULL, + employee_id NUMBER(38,0) NOT NULL, + variable_archive_id NUMBER(38,0) NOT NULL, + variable_item_id NUMBER(38,0) NOT NULL, + item_value varchar2(255) NULL , + create_time DATE NOT NULL , + update_time DATE NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type int NOT NULL , + tenant_key varchar2(10) NULL, + PRIMARY KEY (id) +); +/ + +CREATE TABLE hrsa_variable_item ( + id NUMBER(38,0) NOT NULL , + name varchar2(255) NOT NULL , + code varchar2(255) NOT NULL, + data_type varchar2(20) NULL, + create_time DATE NOT NULL, + update_time DATE NOT NULL, + creator NUMBER(38,0) NOT NULL, + delete_type int NOT NULL, + tenant_key varchar2(10) NULL , + PRIMARY KEY (id) +); +/ + diff --git a/src/com/api/salary/web/VariableArchiveController.java b/src/com/api/salary/web/VariableArchiveController.java new file mode 100644 index 000000000..ccf82cd89 --- /dev/null +++ b/src/com/api/salary/web/VariableArchiveController.java @@ -0,0 +1,8 @@ +package com.api.salary.web; + +import javax.ws.rs.Path; + +@Path("/bs/hrmsalary/variableSalary") +public class VariableArchiveController extends com.engine.salary.web.VariableArchiveController { + +} diff --git a/src/com/api/salary/web/VariableItemController.java b/src/com/api/salary/web/VariableItemController.java new file mode 100644 index 000000000..6c3063aea --- /dev/null +++ b/src/com/api/salary/web/VariableItemController.java @@ -0,0 +1,8 @@ +package com.api.salary.web; + +import javax.ws.rs.Path; + +@Path("/bs/hrmsalary/variableSalaryItem") +public class VariableItemController extends com.engine.salary.web.VariableItemController { + +} diff --git a/src/com/engine/salary/constant/SalaryItemConstant.java b/src/com/engine/salary/constant/SalaryItemConstant.java index 217f1d4ea..58840b5f3 100644 --- a/src/com/engine/salary/constant/SalaryItemConstant.java +++ b/src/com/engine/salary/constant/SalaryItemConstant.java @@ -15,6 +15,11 @@ public class SalaryItemConstant { */ public static final String DYNAMIC_SUFFIX = "_salaryItem"; + /** + * 列表中浮动薪资项目动态列后缀标识 + */ + public static final String VARIABLE_ITEM_DYNAMIC_SUFFIX = "_variableItem"; + /** * 薪资核算导入缓存表头字段key */ diff --git a/src/com/engine/salary/entity/datacollection/bo/VariableArchiveBO.java b/src/com/engine/salary/entity/datacollection/bo/VariableArchiveBO.java new file mode 100644 index 000000000..92f09ec15 --- /dev/null +++ b/src/com/engine/salary/entity/datacollection/bo/VariableArchiveBO.java @@ -0,0 +1,279 @@ +package com.engine.salary.entity.datacollection.bo; + +import com.cloudstore.eccom.constant.WeaBoolAttr; +import com.cloudstore.eccom.pc.table.WeaTableColumn; +import com.engine.salary.constant.SalaryItemConstant; +import com.engine.salary.entity.datacollection.po.VariableItemPO; +import com.engine.salary.util.SalaryI18nUtil; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Description: 浮动薪资档案 + * @Author: xzy + */ +public class VariableArchiveBO { + + @Override + public String toString() { + return "SalaryArchiveBO{}"; + } + + + + /** + * 构建表格动态列 + * + * @param variableItems + */ + public static List buildVariableArchiveTable(List variableItems) { + // 表格表头 + List columns = new ArrayList<>(); + WeaTableColumn idColumn = new WeaTableColumn("100px", "id", "id"); + idColumn.setIsPrimarykey(WeaBoolAttr.TRUE); + idColumn.setDisplay(WeaBoolAttr.FALSE); + columns.add(idColumn); + WeaTableColumn employeeIdColumn = new WeaTableColumn("100px", "人员信息表的主键id", "employeeId"); + employeeIdColumn.setDisplay(WeaBoolAttr.FALSE); + columns.add(employeeIdColumn); + columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(85429, "姓名"), "username")); + columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86185, "部门"), "departmentName")); + columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86186, "手机号"), "mobile")); + columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86185, "工号"), "workcode")); + columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86186, "证件号码"), "idNo")); + columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86187, "入职日期"), "companystartdate")); + for (VariableItemPO variableItem : variableItems) { + columns.add(new WeaTableColumn("100px", variableItem.getName(), variableItem.getId() + SalaryItemConstant.VARIABLE_ITEM_DYNAMIC_SUFFIX)); + } + + return columns; + } + +// /** +// * 构建薪资档案数据 +// * +// * @param salaryArchiveList +// * @param salaryArchiveItemDataList +// * @param localDateRange +// * @param allEmployeeIds +// * @param isOnlyTaxAgent +// * @return +// */ +// public static List buildSalaryArchiveData(List salaryArchiveList, +// List salaryArchiveItemDataList, +// LocalDateRange localDateRange, +// List allEmployeeIds, +// boolean isOnlyTaxAgent) { +// // 开始日期 +// Date start = localDateRange.getFromDate(); +// // 结束日期 +// Date end = localDateRange.getEndDate(); +// +// List list = new ArrayList<>(); +// allEmployeeIds.forEach(e -> { +// // 同一个人的档案数据 +// List salaryArchives = salaryArchiveList.stream().filter(f -> f.getEmployeeId().equals(e)).collect(Collectors.toList()); +// List salaryArchiveIds = salaryArchives.stream().map(SalaryArchivePO::getId).collect(Collectors.toList()); +// // 同一个人的薪资项目调整历史数据 +// List salaryArchiveItems = salaryArchiveItemDataList.stream().filter(d -> salaryArchiveIds.contains(d.getSalaryArchiveId())).collect(Collectors.toList()); +// List salaryArchiveItemIds = salaryArchiveItems.stream().map(SalaryArchiveItemPO::getSalaryItemId).distinct().collect(Collectors.toList()); +// +// SalaryArchiveDataDTO salaryArchiveData = new SalaryArchiveDataDTO(); +// salaryArchiveData.setEmployeeId(e); +// List taxAgents = new ArrayList<>(); +// // 按个税扣缴义务人生效日期时间段切割 +// for (SalaryArchivePO salaryArchive : salaryArchives) { +// Date fromDate = salaryArchive.getPayStartDate(); +// Date endDate = salaryArchive.getPayEndDate(); +// // 起始发薪日不为空,且不能比结束日期晚,最后发薪日可空可不空,但是如果不为空,就不能比开始日期早,且起始发薪日不能晚于最后发薪日 +// boolean isEnable = fromDate != null && !fromDate.after(end) && (endDate == null || (!fromDate.after(endDate) && !endDate.before(start))); +// if (isEnable) { +// SalaryArchiveTaxAgentDataDTO taxAgent = new SalaryArchiveTaxAgentDataDTO(); +// taxAgent.setTaxAgentId(salaryArchive.getTaxAgentId()); +// // taxAgent.setIncomeCategory(salaryArchive.getIncomeCategory()); +// // taxAgent.setSalarySobIds(salaryArchiveSobList.stream().filter(sob->sob.getSalaryArchiveId().equals(salaryArchive.getId())).map(SalaryArchiveSobPO::getSalarySobId).distinct().collect(Collectors.toList())); +// taxAgent.setEffectiveDateRange(LocalDateRange.builder().fromDate((fromDate.before(start) ? start : fromDate)).endDate(endDate == null || endDate.after(end) ? end : endDate).build()); +// // 薪资项目数据按个税扣缴义务人切割 +// if (!isOnlyTaxAgent) { +// // 开始日期 +// Date startItem = taxAgent.getEffectiveDateRange().getFromDate(); +// // 结束日期 +// Date endItem = taxAgent.getEffectiveDateRange().getEndDate(); +// Date endTempItem = endItem; +// List salaryItemValues = new ArrayList<>(); +// for (Long salaryArchiveItemId : salaryArchiveItemIds) { +// boolean flag = false; +// for (SalaryArchiveItemPO salaryArchiveItem : salaryArchiveItems) { +// if (!salaryArchiveItemId.equals(salaryArchiveItem.getSalaryItemId()) || !salaryArchiveItem.getSalaryArchiveId().equals(salaryArchive.getId())) { +// continue; +// } +// Date fromDateItem = salaryArchiveItem.getEffectiveTime(); +// if (fromDateItem.after(endTempItem) || endTempItem.before(startItem)) { +// continue; +// } +// if (endTempItem.equals(startItem) && flag) { +// continue; +// } +// SalaryArchiveItemDataDTO salaryArchiveItemData = new SalaryArchiveItemDataDTO(); +// salaryArchiveItemData.setEffectiveDateRange(LocalDateRange.builder().fromDate((fromDateItem.before(startItem) ? startItem : fromDateItem)).endDate(endTempItem).build()); +// salaryArchiveItemData.setSalaryItemId(salaryArchiveItem.getSalaryItemId()); +// salaryArchiveItemData.setValue(salaryArchiveItem.getItemValue()); +// salaryItemValues.add(salaryArchiveItemData); +// flag = true; +// endTempItem = fromDateItem; +// } +// endTempItem = endItem; +// } +// taxAgent.setSalaryItemValues(salaryItemValues); +// } +// taxAgents.add(taxAgent); +// } +// } +// salaryArchiveData.setTaxAgents(taxAgents); +// list.add(salaryArchiveData); +// }); +// +// return list; +// } +// +// /** +// * 构建增量数据 +// * +// * @param taxAgentEmpChangeList +// * @param salaryArchiveList +// * @param salaryArchiveItemList +// * @param currentEmployeeId +// */ +// public static ChangeData buildChangeData(List taxAgentEmpChangeList, List salaryArchiveList, List salaryArchiveItemList, Long currentEmployeeId) { +// List changeIds = taxAgentEmpChangeList.stream().map(TaxAgentEmpChangePO::getId).collect(Collectors.toList()); +// // 根据个税扣缴义务人和人员以及增量类型分组 +// Map changeTypeMap = taxAgentEmpChangeList.stream().collect(Collectors.groupingBy(change -> change.getTaxAgentId() + "-" + change.getEmployeeId() + "-" + change.getChangeType(), Collectors.counting())); +// // 顺序倒转 +// Collections.reverse(taxAgentEmpChangeList); +// // 去重 +// taxAgentEmpChangeList = taxAgentEmpChangeList.stream() +// .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getTaxAgentId() + "-" + f.getEmployeeId()))), ArrayList::new)); +// List taxAgentEmpChanges = taxAgentEmpChangeList +// .stream() +// // 不相等则保留,否则忽略 +// .filter(change -> !Objects.equals(changeTypeMap.get(change.getTaxAgentId() + "-" + change.getEmployeeId() + "-" + TaxAgentEmpChangeTypeEnum.ADD.getValue()) +// , changeTypeMap.get(change.getTaxAgentId() + "-" + change.getEmployeeId() + "-" + TaxAgentEmpChangeTypeEnum.DEL.getValue()))) +// .collect(Collectors.toList()); +// +// Date now = new Date(); +// Date today = new Date(); +// List stopStatus = Arrays.asList(SalaryArchiveStatusEnum.STOP_FROM_PENDING.getValue(), SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue()); +// List salaryArchiveAddTodoList = Lists.newArrayList(); +// List salaryArchiveUpdateTodoList = Lists.newArrayList(); +// List salaryArchiveItemAddTodos = Lists.newArrayList(); +// +// Map salaryArchiveListMap = SalaryEntityUtil.convert2Map(salaryArchiveList, k -> k.getTaxAgentId() + "-" + k.getEmployeeId()); +// taxAgentEmpChanges.forEach(change -> { +// SalaryArchivePO salaryArchive = salaryArchiveListMap.get(change.getTaxAgentId() + "-" + change.getEmployeeId()); +// // 如果是新增 说明:如果没有档案,则新增,如果有档案而且是停薪,就挪到待定薪中,以个税扣缴义务人和人员id判断唯一 +// if (change.getChangeType() == TaxAgentEmpChangeTypeEnum.ADD.getValue()) { +// if (salaryArchive != null) { +// // 停薪中跳回待定薪:从a调动到b又调动到a,或者是删除待办后再覆盖 +// if (stopStatus.contains(salaryArchive.getRunStatus())) { +// // 跳回待定薪 +// salaryArchive.setRunStatus(SalaryArchiveStatusEnum.PENDING.getValue()); +// if (salaryArchive.getRunStatus().equals(SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue())) { +// salaryArchive.setPayStartDate(today); +// salaryArchive.setPayEndDate(null); +// } +// salaryArchiveUpdateTodoList.add(salaryArchive); +// // 待停薪到停薪的就要复制最新的薪资项目 +// if (salaryArchive.getRunStatus().equals(SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue())) { +// // 拷贝最新的薪资项目数据 +// List salaryArchiveItemValuelList = salaryArchiveItemList.stream().filter(i -> i.getSalaryArchiveId().equals(salaryArchive.getId())).collect(Collectors.toList()); +// salaryArchiveItemValuelList.forEach(i -> { +// salaryArchiveItemAddTodos.add(SalaryArchiveItemPO.builder() +// .id(IdGenerator.generate()) +// .salaryArchiveId(salaryArchive.getId()) +// .employeeId(salaryArchive.getEmployeeId()) +// .effectiveTime(today) +// .adjustReason(SalaryArchiveItemAdjustReasonEnum.INIT.getValue()) +// .salaryItemId(i.getSalaryItemId()) +// .itemValue(i.getItemValue()) +// .description("") +// // 不用设置操作人 +// .operateTime(now) +// .createTime(now) +// .updateTime(now) +// .creator(currentEmployeeId) +// .deleteType(NumberUtils.INTEGER_ZERO) +// .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) +// .build()); +// }); +// } +// } +// } else { +// salaryArchiveAddTodoList.add(SalaryArchivePO.builder() +// .id(IdGenerator.generate()) +// .employeeId(change.getEmployeeId()) +// .taxAgentId(change.getTaxAgentId()) +// .employeeType(change.getEmployeeType()) +// .runStatus(SalaryArchiveStatusEnum.PENDING.getValue()) +// // .incomeCategory(IncomeCategoryEnum.WAGES_AND_SALARIES.getValue()) +// // .modifier(0L) +// .createTime(now) +// .updateTime(now) +// .creator(currentEmployeeId) +// .deleteType(NumberUtils.INTEGER_ZERO) +// .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) +// .build()); +// } +// // 如果是删除 说明:如果有档案并且是在定薪列表才处理,没档案不用管 +// } else if (change.getChangeType() == TaxAgentEmpChangeTypeEnum.DEL.getValue()) { +// if (salaryArchive != null) { +// if (salaryArchive.getRunStatus().equals(SalaryArchiveStatusEnum.FIXED.getValue())) { +// // 跳到待停薪 +// salaryArchive.setRunStatus(SalaryArchiveStatusEnum.SUSPEND.getValue()); +// // salaryArchive.setPayEndDate(today); +// salaryArchiveUpdateTodoList.add(salaryArchive); +// } else if (salaryArchive.getRunStatus().equals(SalaryArchiveStatusEnum.PENDING.getValue())) { +// // 跳到停薪 +// salaryArchive.setRunStatus(SalaryArchiveStatusEnum.STOP_FROM_PENDING.getValue()); +// salaryArchiveUpdateTodoList.add(salaryArchive); +// } +// } +// } +// }); +// +// return ChangeData.builder() +// .salaryArchiveAddTodoList(salaryArchiveAddTodoList) +// .salaryArchiveUpdateTodoList(salaryArchiveUpdateTodoList) +// .salaryArchiveItemAddTodos(salaryArchiveItemAddTodos) +// .changeIds(changeIds) +// .build(); +// } +// +// @Data +// @Builder +// @NoArgsConstructor +// @AllArgsConstructor +// public static class ChangeData { +// +// /** +// * 批量修改薪资档案 +// */ +// private List salaryArchiveAddTodoList; +// +// /** +// * 批量新增薪资档案 +// */ +// private List salaryArchiveUpdateTodoList; +// +// /** +// * 落库处理薪资项目 +// */ +// private List salaryArchiveItemAddTodos; +// +// /** +// * 删除增量数据 +// */ +// private List changeIds; +// } + +} diff --git a/src/com/engine/salary/entity/datacollection/bo/VariableArchiveExcelBO.java b/src/com/engine/salary/entity/datacollection/bo/VariableArchiveExcelBO.java new file mode 100644 index 000000000..2644c4236 --- /dev/null +++ b/src/com/engine/salary/entity/datacollection/bo/VariableArchiveExcelBO.java @@ -0,0 +1,297 @@ +package com.engine.salary.entity.datacollection.bo; + +import com.engine.core.impl.Service; +import com.engine.salary.constant.SalaryArchiveConstant; +import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.datacollection.param.VariableArchiveImportHandleParam; +import com.engine.salary.entity.datacollection.po.VariableArchiveItemPO; +import com.engine.salary.entity.datacollection.po.VariableArchivePO; +import com.engine.salary.entity.datacollection.po.VariableItemPO; +import com.engine.salary.enums.UserStatusEnum; +import com.engine.salary.enums.salaryarchive.SalaryArchiveFieldTypeEnum; +import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.IdGenerator; +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import weaver.general.Util; +import weaver.hrm.User; + +import java.util.*; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +/** + * @Description: 浮动薪资档案-excel + * @Author: xzy + * @Date: 2024-08-08 10:51 + */ +public class VariableArchiveExcelBO extends Service { + + public static String userNameI18n; + public static String departmentI18n; + public static String jobNumI18n; + public static String hrStatusI18n; + public static String repeatMsg; + public static String taxAgentI18n; + public static String taxAgentRangeMsg; + public static String empRepeatMsg; + + public static String notEmptyI18n; + + public static String incomeCategoryI18n; + public static String salarySobI18n; + public static String effectiveTimeI18n; + public static String payStartDateI18n; + public static String payEndDateI18n; + public static String adjustReasonI18n; + public static String listTypeErrMsg; + public static String taxAgentNoExist; + public static String incomeCategoryNoExist; + public static String currSalarySobI18n; + public static String noExist; + public static String effectiveTimeErr; + public static String adjustReasonNoExist; + public static String dateErr; + public static String payStartUnableAfterEnd; + + public static String salaryItemNoBeforeCurrentEffectiveTime; + public static String salaryItemAdjustNoSame; + public static String salaryItemAdjustNoSameIneffective; + + public static String salaryArchiveErr; + public static String numberErr; + + /** + * 初始化i18n + */ + public static void initI18n() { + userNameI18n = SalaryI18nUtil.getI18nLabel(85429, "姓名"); + departmentI18n = SalaryI18nUtil.getI18nLabel(86185, "部门"); + jobNumI18n = SalaryI18nUtil.getI18nLabel(86317, "工号"); + hrStatusI18n = SalaryI18nUtil.getI18nLabel(109332, "人事状态"); + repeatMsg = "[" + Joiner.on(",").join(new List[]{Arrays.asList(userNameI18n, departmentI18n, jobNumI18n, hrStatusI18n)}) + "]"; + taxAgentI18n = SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"); + taxAgentRangeMsg = SalaryI18nUtil.getI18nLabel(132633, "该员工不在该个税扣缴义务人的人员范围中") + "," + SalaryI18nUtil.getI18nLabel(127308, "请检查") + repeatMsg; + empRepeatMsg = SalaryI18nUtil.getI18nLabel(121899, "员工信息重复,请检查") + repeatMsg; + + notEmptyI18n = SalaryI18nUtil.getI18nLabel(100577, "不能为空"); + + incomeCategoryI18n = SalaryI18nUtil.getI18nLabel(121908, "收入所得项目"); + salarySobI18n = SalaryI18nUtil.getI18nLabel(87889, "薪资账套"); + effectiveTimeI18n = SalaryI18nUtil.getI18nLabel(85904, "生效日期"); + payStartDateI18n = SalaryI18nUtil.getI18nLabel(109527, "起始发薪日期"); + payEndDateI18n = SalaryI18nUtil.getI18nLabel(109329, "最后发薪日期"); + adjustReasonI18n = SalaryI18nUtil.getI18nLabel(85431, "调整原因"); + + listTypeErrMsg = SalaryI18nUtil.getI18nLabel(115527, "该条数据不符合当前列表导入要求或其他列表存在该档案,不可导入"); + + taxAgentNoExist = SalaryI18nUtil.getI18nLabel(100545, "个税扣缴义务人不存在"); + incomeCategoryNoExist = SalaryI18nUtil.getI18nLabel(121923, "收入所得项目不存在"); + + currSalarySobI18n = SalaryI18nUtil.getI18nLabel(127213, "该收入所得项目"); + noExist = SalaryI18nUtil.getI18nLabel(127236, "不存在"); + + effectiveTimeErr = SalaryI18nUtil.getI18nLabel(102497, "生效日期错误或格式不正确,正确格式示例为'2022-01-01'、'2022/1/1'"); + adjustReasonNoExist = SalaryI18nUtil.getI18nLabel(100591, "调整原因不存在"); + + dateErr = SalaryI18nUtil.getI18nLabel(109819, "日期错误或格式不正确,正确格式示例为'2022-01-01'、'2022/1/1'"); + + payStartUnableAfterEnd = SalaryI18nUtil.getI18nLabel(109214, "起始发薪日期不可晚于最后发薪日"); + + salaryItemNoBeforeCurrentEffectiveTime = SalaryI18nUtil.getI18nLabel(100429, "生效日期不可早于当前已生效的调整日期"); + salaryItemAdjustNoSame = SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"); + salaryItemAdjustNoSameIneffective = SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"); + + salaryArchiveErr = SalaryI18nUtil.getI18nLabel(101723, "该员工的薪资档案记录有误,请检查"); + numberErr = SalaryI18nUtil.getI18nLabel(100581, "请输入数字"); + + } + + + /** + * 校验单行数据 + * + * @param map + * @param headers + * @param excelComments + * @param errorCount + * @param importHandleParam + * @return + */ + public static boolean singleRowCheck(List allTodoVariableArchives, + Map map, + List headers, + List> excelComments, + int errorCount, + VariableArchiveImportHandleParam importHandleParam, + User user) { + + boolean isError = false; + String rowindex = "第" + map.get("index") + "行"; + // 1.姓名 + String userName = Optional.ofNullable(map.get(userNameI18n)).orElse("").toString(); + String deparmentName = Optional.ofNullable(map.get(departmentI18n)).orElse("").toString(); + String mobileName = Optional.ofNullable(map.get("手机号")).orElse("").toString(); + String workcode = Optional.ofNullable(map.get("工号")).orElse("").toString(); + String idNo = Optional.ofNullable(map.get("证件号码")).orElse("").toString(); + + String validType = importHandleParam.getEmpValidType(); + List emps = new ArrayList<>(); + if ("0".equals(validType)) { + //“0”代表姓名+部门+手机号的匹配原则,“1”代表工号为唯一匹配原则 + emps = importHandleParam.getEmployees().stream().filter(e -> + (StringUtils.isBlank(userName) || Objects.equals(e.getUsername(), userName)) + && (StringUtils.isBlank(deparmentName) || Objects.equals(e.getDepartmentName(), deparmentName)) + && (StringUtils.isBlank(mobileName) || Objects.equals(e.getMobile(), mobileName))).collect(Collectors.toList()); + } else if ("1".equals(validType)) { + emps = importHandleParam.getEmployees().stream().filter(e -> (StringUtils.isBlank(workcode) || Objects.equals(e.getWorkcode(), workcode))) + .collect(Collectors.toList()); + } + else if ("2".equals(validType)) { + emps = importHandleParam.getEmployees().stream().filter(e -> (StringUtils.isBlank(idNo) || Objects.equals(e.getIdNo(), idNo))) + .collect(Collectors.toList()); + } + + List employeeSameIds = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(emps) && emps.size() > 1) { + employeeSameIds = emps.stream().filter(e -> UserStatusEnum.getNormalStatus().contains(e.getStatus())).map(DataCollectionEmployee::getEmployeeId).collect(Collectors.toList()); + } + if (CollectionUtils.isNotEmpty(emps) && emps.size() == 1) { + employeeSameIds = emps.stream().map(DataCollectionEmployee::getEmployeeId).collect(Collectors.toList()); + } + Long employeeId = CollectionUtils.isNotEmpty(employeeSameIds) && employeeSameIds.size() == 1 && employeeSameIds.get(0) > 0 ? employeeSameIds.get(0) : null; + + if (employeeId == null) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", rowindex + "查找人员失败,请确定姓名、部门、手机号正确且唯一"); + excelComments.add(errorMessageMap); + isError = true; + return isError; + } + + // 用于初始化导入数据校验 + map.put("employeeId", employeeId); + if (allTodoVariableArchives.contains(employeeId.toString())) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", rowindex + "存在重复数据"); + excelComments.add(errorMessageMap); + isError = true; + return isError; + } else { + allTodoVariableArchives.add(employeeId.toString()); + } + + // 构建薪资档案 + VariableArchivePO finalVariableArchive = buildVariableArchive(employeeId, importHandleParam); + map.put("variableArchiveId", finalVariableArchive.getId()); + List needDelArchiveItemIds = new ArrayList<>(); + for (int j = 0; j < headers.size(); j++) { + String header = headers.get(j); + Object key = header; + if (key == null) { + continue; + } + String cellVal = Optional.ofNullable(map.get(key.toString())).orElse("").toString(); + + + boolean isNotEmpty = StringUtils.isNotEmpty(cellVal); + // 1.姓名列处理 + if (isNotEmpty && userNameI18n.equals(key.toString())) { + if (CollectionUtils.isEmpty(employeeSameIds) || employeeSameIds.size() > 1) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", rowindex + header + empRepeatMsg); + excelComments.add(errorMessageMap); + isError = true; + } + } else { + // 浮动薪资项目数据 + if (!isError) { + Optional optionalVariableItem = importHandleParam.getVariableItems().stream().filter(e -> Util.formatMultiLang(e.getName(), String.valueOf(user.getLanguage())).equals(key)).findFirst(); + + if (optionalVariableItem.isPresent()) { + VariableItemPO variableItemPO = optionalVariableItem.get(); + // 数值类型判断 + boolean isNotNumber = variableItemPO.getDataType().equals(SalaryArchiveFieldTypeEnum.NUMBER.getValue()) && StringUtils.isNotEmpty(cellVal) && !Pattern.matches(SalaryArchiveConstant.NUMBER_REGEX, cellVal); + if (isNotNumber) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", rowindex + key + numberErr); + excelComments.add(errorMessageMap); + isError = true; + } + Long variableItemId = variableItemPO.getId(); + // 已生效 + List effectiveList = Optional.ofNullable(importHandleParam.getEffectiveItemListMap().get(finalVariableArchive.getId() + "-" + variableItemId)).orElse(Lists.newArrayList()); + // 先删除后新增 + needDelArchiveItemIds.addAll(effectiveList.stream().map(VariableArchiveItemPO::getId).collect(Collectors.toList())); + + // 导入时不需要处理的项目 + boolean isInitNull = CollectionUtils.isEmpty(effectiveList) && StringUtils.isEmpty(cellVal); + if (!isError && !isInitNull && StringUtils.isNotBlank(cellVal)) { + importHandleParam.getVariableArchiveItemSaves().add(VariableArchiveItemPO.builder() + .id(IdGenerator.generate()) + .employeeId(finalVariableArchive.getEmployeeId()) + .variableArchiveId(finalVariableArchive.getId()) + .variableItemId(variableItemId) + .itemValue(cellVal) + .creator(importHandleParam.getCurrentEmployeeId()) + .createTime(importHandleParam.getNowTime()) + .updateTime(importHandleParam.getNowTime()) + .deleteType(NumberUtils.INTEGER_ZERO) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build()); + } + } + } + } + } + + // 如果当前校验行没问题,修改起始发薪日期和最终发薪日期等 + if (isError) { + // 将前面添加好的数据给过滤掉 + importHandleParam.setVariableArchiveSaves(importHandleParam.getVariableArchiveSaves().stream().filter(f -> !finalVariableArchive.getId().equals(f.getId())).collect(Collectors.toList())); + importHandleParam.setVariableArchiveItemSaves(importHandleParam.getVariableArchiveItemSaves().stream().filter(f -> !finalVariableArchive.getId().equals(f.getVariableArchiveId())).collect(Collectors.toList())); + } else { + importHandleParam.getVariableArchiveItemDelSalaryItemIds().addAll(needDelArchiveItemIds); + } + + return isError; + } + + + /** + * 构建浮动薪资档案对象 + * + * @param employeeId + * @param importHandleParam + * @return + */ + public static VariableArchivePO buildVariableArchive(Long employeeId, VariableArchiveImportHandleParam importHandleParam) { + VariableArchivePO variableArchivePO = importHandleParam.getVariableArchivesMap().get(employeeId); + if (variableArchivePO == null) { + // 新增浮动档案 + variableArchivePO = VariableArchivePO.builder() + .id(IdGenerator.generate()) + .employeeId(employeeId) + .salaryMonth(importHandleParam.getSalaryMonthDate()) + .createTime(importHandleParam.getNowTime()) + .updateTime(importHandleParam.getNowTime()) + .creator(importHandleParam.getCurrentEmployeeId()) + .deleteType(NumberUtils.INTEGER_ZERO) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build(); + importHandleParam.getVariableArchiveSaves().add(variableArchivePO); + } + return variableArchivePO; + } + + + @Override + public String toString() { + return "SalaryArchiveExcelBO{}"; + } +} diff --git a/src/com/engine/salary/entity/datacollection/dto/VariableArchiveItemDTO.java b/src/com/engine/salary/entity/datacollection/dto/VariableArchiveItemDTO.java new file mode 100644 index 000000000..f672cf27b --- /dev/null +++ b/src/com/engine/salary/entity/datacollection/dto/VariableArchiveItemDTO.java @@ -0,0 +1,33 @@ +package com.engine.salary.entity.datacollection.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 浮动薪酬档案明细 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author xzy + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class VariableArchiveItemDTO { + + private Long id; + + /** + * 浮动项目id + */ + private Long variableItemId; + + /** + * 浮动值 + */ + private String itemValue; +} diff --git a/src/com/engine/salary/entity/datacollection/dto/VariableArchiveListDTO.java b/src/com/engine/salary/entity/datacollection/dto/VariableArchiveListDTO.java new file mode 100644 index 000000000..7851c3cb2 --- /dev/null +++ b/src/com/engine/salary/entity/datacollection/dto/VariableArchiveListDTO.java @@ -0,0 +1,87 @@ +package com.engine.salary.entity.datacollection.dto; + +import com.cloudstore.eccom.pc.table.WeaTableType; +import com.engine.salary.annotation.I18n; +import com.engine.salary.annotation.SalaryTable; +import com.engine.salary.annotation.TableTitle; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * 浮动薪资档案列表 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author xzy + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@SalaryTable(pageId = "bd985583-f84j-p2aj-p288-2hw3hosy6r6,", tableType = WeaTableType.CHECKBOX) +public class VariableArchiveListDTO { + + @TableTitle(title = "id", dataIndex = "id", key = "id") + private Long id; + + @TableTitle(title = "人员信息表的主键id", dataIndex = "employeeId", key = "employeeId") + private Long employeeId; + + private Date salaryMonth; + + /** + * 姓名 + */ + @TableTitle(title = "姓名", dataIndex = "username", key = "username") + @I18n + private String username; + + /** + * 分部 + */ + @TableTitle(title = "分部", dataIndex = "subcompanyName", key = "subcompanyName") + @I18n + private String subcompanyName; + + /** + * 部门 + */ + @TableTitle(title = "部门", dataIndex = "departmentName", key = "departmentName") + @I18n + private String departmentName; + + /** + * 电话 + */ + @TableTitle(title = "电话", dataIndex = "mobile", key = "mobile") + private String mobile; + + + /** + * 工号 + */ + @TableTitle(title = "工号", dataIndex = "workcode", key = "workcode") + private String workcode; + + /** + * 证件号码 + */ + @TableTitle(title = "证件号码", dataIndex = "idNo", key = "idNo") + private String idNo; + + /** + * 入职日期 + */ + private String companystartdate; + + /** + * 离职日期 + */ + private String dismissdate; + +} diff --git a/src/com/engine/salary/entity/datacollection/dto/VariableItemListDTO.java b/src/com/engine/salary/entity/datacollection/dto/VariableItemListDTO.java new file mode 100644 index 000000000..dc38ca99b --- /dev/null +++ b/src/com/engine/salary/entity/datacollection/dto/VariableItemListDTO.java @@ -0,0 +1,37 @@ +package com.engine.salary.entity.datacollection.dto; + +import com.engine.salary.annotation.TableTitle; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 浮动薪资项目列表 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author xzy + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class VariableItemListDTO { + + @TableTitle(title = "id", dataIndex = "id", key = "id") + private Long id; + + @TableTitle(title = "项目名称", dataIndex = "name", key = "name") + private String name; + + @TableTitle(title = "字段类型", dataIndex = "dataType", key = "dataType") + private String dataType; + + /** + * 是否可删除 + */ + private boolean canDelete; + +} diff --git a/src/com/engine/salary/entity/datacollection/param/VariableArchiveImportHandleParam.java b/src/com/engine/salary/entity/datacollection/param/VariableArchiveImportHandleParam.java new file mode 100644 index 000000000..4b3622869 --- /dev/null +++ b/src/com/engine/salary/entity/datacollection/param/VariableArchiveImportHandleParam.java @@ -0,0 +1,98 @@ +package com.engine.salary.entity.datacollection.param; + +import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.datacollection.po.VariableArchiveItemPO; +import com.engine.salary.entity.datacollection.po.VariableArchivePO; +import com.engine.salary.entity.datacollection.po.VariableItemPO; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Collection; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * 数据采集-浮动薪酬导入参数 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author xzy + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class VariableArchiveImportHandleParam { + + // 上传文件id + String imageId; + + // 薪资所属月 + String salaryMonth; + + Date salaryMonthDate; + + // --------------------------- + Long currentEmployeeId; + + String tenantKey; + + /** + * 人员验证方式 + */ + String empValidType; + + /** + * 获取租户下所有的人员 + */ + List employees; + + /** + * 获取所有可被引用的浮动薪资项目 + */ + List variableItems; + + /** + * 查询已有的浮动薪资档案基本数据 + */ + Map variableArchivesMap; + + /** + * 浮动薪资项目id + */ + Collection variableItemIds; + + /** + * 查询已生效的浮动薪资项目数据 + */ + Map> effectiveItemListMap; + + /** + * 当前时间 + */ + Date nowTime = new Date(); + + /** + * 当天 + */ + Date today = new Date(); + + /** + * 待保存浮动薪资档案 + */ + List variableArchiveSaves; + + /** + * 待保存浮动薪资档案-浮动薪资项目 + */ + List variableArchiveItemSaves; + + /** + * 待删除浮动薪资档案-浮动薪资项目 + */ + List variableArchiveItemDelSalaryItemIds; +} diff --git a/src/com/engine/salary/entity/datacollection/param/VariableArchiveQueryParam.java b/src/com/engine/salary/entity/datacollection/param/VariableArchiveQueryParam.java new file mode 100644 index 000000000..e7296d645 --- /dev/null +++ b/src/com/engine/salary/entity/datacollection/param/VariableArchiveQueryParam.java @@ -0,0 +1,47 @@ +package com.engine.salary.entity.datacollection.param; + +import com.engine.salary.common.BaseQueryParam; +import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Collection; +import java.util.Date; +import java.util.List; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//数据采集-浮动薪酬查询参数 +public class VariableArchiveQueryParam extends BaseQueryParam { + + // 主键id + private Collection ids; + + // 主键id + private Long id; + + // 薪资年月 + @DataCheck(require = true,message = "薪资所属月不能为空") + private String salaryMonth; + + private Date salaryMonthDate; + + // 姓名 + private String username; + + // 部门id + private List departmentIds; + + // 工号 + private String workcode; + + // 下载模板是否带数据 + private boolean hasData; + + private List employeeIds; +} diff --git a/src/com/engine/salary/entity/datacollection/param/VariableArchiveSaveParam.java b/src/com/engine/salary/entity/datacollection/param/VariableArchiveSaveParam.java new file mode 100644 index 000000000..e94448ffd --- /dev/null +++ b/src/com/engine/salary/entity/datacollection/param/VariableArchiveSaveParam.java @@ -0,0 +1,35 @@ +package com.engine.salary.entity.datacollection.param; + +import com.engine.salary.entity.datacollection.dto.VariableArchiveItemDTO; +import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; +import java.util.List; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//数据采集-浮动薪酬档案保存参数 +public class VariableArchiveSaveParam { + + // 主键id + private Long id; + + // 薪资年月 + @DataCheck(require = true,message = "薪资所属月不能为空") + private String salaryMonth; + + private Date salaryMonthDate; + + // 人员id + private Long employeeId; + + // 浮动值 + private List itemValueList; +} diff --git a/src/com/engine/salary/entity/datacollection/param/VariableItemQueryParam.java b/src/com/engine/salary/entity/datacollection/param/VariableItemQueryParam.java new file mode 100644 index 000000000..a2dcc0b0b --- /dev/null +++ b/src/com/engine/salary/entity/datacollection/param/VariableItemQueryParam.java @@ -0,0 +1,31 @@ +package com.engine.salary.entity.datacollection.param; + +import com.engine.salary.common.BaseQueryParam; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +// 浮动薪酬项目查询参数 +public class VariableItemQueryParam extends BaseQueryParam { + + /** + * 浮动薪酬项目名称 + */ + private String itemName; + + + private Long id; + + /** + * 项目ids + */ + private List itemIds; +} diff --git a/src/com/engine/salary/entity/datacollection/param/VariableItemSaveParam.java b/src/com/engine/salary/entity/datacollection/param/VariableItemSaveParam.java new file mode 100644 index 000000000..4b82aaef3 --- /dev/null +++ b/src/com/engine/salary/entity/datacollection/param/VariableItemSaveParam.java @@ -0,0 +1,41 @@ +package com.engine.salary.entity.datacollection.param; + +import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; +import com.engine.salary.util.valid.DataCheck; +import com.engine.salary.util.valid.RuntimeTypeEnum; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author xzy + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class VariableItemSaveParam { + + //主键id + @JsonSerialize(using = ToStringSerializer.class) + @DataCheck(require = true, runtime = {RuntimeTypeEnum.UPDATE}, message = "id不允许为空") + private Long id; + + //名称 + @DataCheck(require = true, max = 40, message = "名称不允许为空,名称不能超过40个字符") + private String name; + + /** + * 字段类型 + * @see SalaryDataTypeEnum + */ + @DataCheck(require = true, message = "字段类型不允许为空") + private String dataType; +} diff --git a/src/com/engine/salary/entity/datacollection/po/VariableArchiveItemPO.java b/src/com/engine/salary/entity/datacollection/po/VariableArchiveItemPO.java new file mode 100644 index 000000000..52e9772e4 --- /dev/null +++ b/src/com/engine/salary/entity/datacollection/po/VariableArchiveItemPO.java @@ -0,0 +1,76 @@ +package com.engine.salary.entity.datacollection.po; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Collection; +import java.util.Date; + +/** + * @author Harryxzy + * @ClassName VariableArchiveItemPO + * @date 2024/08/07 9:15 + * @description 浮动薪酬档案明细 + */ + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class VariableArchiveItemPO { + + private Long id; + + /** + * 员工id + */ + private Long employeeId; + + /** + * 浮动薪资档案主键id + */ + private Long variableArchiveId; + + /** + * 浮动项目id + */ + private Long variableItemId; + + /** + * 浮动值 + */ + private String itemValue; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新时间 + */ + private Date updateTime; + + /** + * 创建人 + */ + private Long creator; + + /** + * 是否已删除。0:未删除、1:已删除 + */ + private Integer deleteType; + + /** + * 租户ID + */ + private String tenantKey; + + + //主键id集合 + private Collection ids; + private Collection variableArchiveIds; + +} diff --git a/src/com/engine/salary/entity/datacollection/po/VariableArchivePO.java b/src/com/engine/salary/entity/datacollection/po/VariableArchivePO.java new file mode 100644 index 000000000..b3735be89 --- /dev/null +++ b/src/com/engine/salary/entity/datacollection/po/VariableArchivePO.java @@ -0,0 +1,49 @@ +package com.engine.salary.entity.datacollection.po; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Collection; +import java.util.Date; + +/** + * @author Harryxzy + * @ClassName VariableArchivePO + * @date 2024/08/07 9:16 + * @description 浮动薪酬档案 + */ + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class VariableArchivePO { + + private Long id; + + /** + * 人员id + */ + private Long employeeId; + + /** + * 薪资月份 + */ + private Date salaryMonth; + + private Date createTime; + + private Date updateTime; + + private Long creator; + + private Integer deleteType; + + private String tenantKey; + + //主键id集合 + private Collection ids; + +} diff --git a/src/com/engine/salary/entity/datacollection/po/VariableItemPO.java b/src/com/engine/salary/entity/datacollection/po/VariableItemPO.java new file mode 100644 index 000000000..78cfa8136 --- /dev/null +++ b/src/com/engine/salary/entity/datacollection/po/VariableItemPO.java @@ -0,0 +1,58 @@ +package com.engine.salary.entity.datacollection.po; + +import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Collection; +import java.util.Date; + +/** + * @author Harryxzy + * @ClassName VariableItemPO + * @date 2024/08/07 9:14 + * @description 浮动薪酬项目 + */ + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class VariableItemPO { + + /** + * 浮动项目id + */ + private Long id; + + /** + * 浮动项目名称 + */ + private String name; + + private String code; + + /** + * 字段类型。string:字符、number:数字 + * + * @see SalaryDataTypeEnum + */ + private String dataType; + + private Date createTime; + + private Date updateTime; + + private Long creator; + + private Integer deleteType; + + private String tenantKey; + + + //主键id集合 + private Collection ids; + +} diff --git a/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java b/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java index 44575341b..5035085ac 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java @@ -4,6 +4,7 @@ import cn.hutool.core.util.NumberUtil; import com.engine.salary.annotation.SalaryFormulaVar; import com.engine.salary.common.LocalDateRange; import com.engine.salary.constant.SalaryFormulaFieldConstant; +import com.engine.salary.constant.SalaryItemConstant; import com.engine.salary.entity.datacollection.AddUpDeduction; import com.engine.salary.entity.datacollection.AddUpSituation; import com.engine.salary.entity.datacollection.DataCollectionEmployee; @@ -95,6 +96,11 @@ public class CalculateFormulaVarBO { */ private List salaryAcctResultPOS; + /** + * 浮动薪资档案 + */ + private List> variableArchiveList; + public CalculateFormulaVarBO(List simpleEmployees, List salaryArchiveData, List addUpSituationPOS, @@ -102,7 +108,8 @@ public class CalculateFormulaVarBO { List otherDeductionPOS, List> welfareData, List attendQuoteDataDTOS, - List salaryAcctResultPOS) { + List salaryAcctResultPOS, + List> variableArchiveList) { this.simpleEmployees = simpleEmployees; this.salaryArchiveData = salaryArchiveData; this.addUpSituationPOS = addUpSituationPOS; @@ -111,6 +118,7 @@ public class CalculateFormulaVarBO { this.welfareData = welfareData; this.attendQuoteDataDTOS = attendQuoteDataDTOS; this.salaryAcctResultPOS = salaryAcctResultPOS; + this.variableArchiveList = variableArchiveList; } /** @@ -125,6 +133,8 @@ public class CalculateFormulaVarBO { handleSalaryAcctResult(salaryAcctCalculateBO, resultMap); // 处理薪资档案 handleSalaryArchiveData(salaryAcctCalculateBO, resultMap); + // 处理浮动薪资档案 + handleVariableArchiveData(salaryAcctCalculateBO, resultMap); // 处理往期累计情况 handleAddUpSituation(resultMap); // 处理累计专项附加扣除 @@ -242,6 +252,31 @@ public class CalculateFormulaVarBO { } } + private void handleVariableArchiveData(SalaryAcctCalculateBO salaryAcctCalculateBO, Map> resultMap) { + // 浮动薪资可选字段 + Map> tempMap = Maps.newHashMapWithExpectedSize(variableArchiveList.size()); + variableArchiveList.forEach(map -> { + Long key = Long.valueOf(map.get("employeeId").toString()); + List formulaVarValues = tempMap.computeIfAbsent(key, k -> Lists.newArrayList()); + formulaVarValues.addAll(salaryAcctCalculateBO.getVariableItems().stream().map(field -> { + String fieldId = SalaryFormulaReferenceEnum.VARIABLE_ITEM.getValue() + + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + + field.getCode(); + + + String value = map.getOrDefault(field.getId() + SalaryItemConstant.VARIABLE_ITEM_DYNAMIC_SUFFIX, StringUtils.EMPTY) == null ? StringUtils.EMPTY + : map.getOrDefault(field.getId() + SalaryItemConstant.VARIABLE_ITEM_DYNAMIC_SUFFIX, StringUtils.EMPTY).toString(); + return new FormulaVarValue().setFieldId(fieldId).setFieldValue(value); + }).collect(Collectors.toList())); + }); + // 填充到返回结果集中 + for (SalaryAcctEmployeePO salaryAcctEmployeePO : salaryAcctCalculateBO.getSalaryAcctEmployeePOS()) { + List formulaVarValues = resultMap.computeIfAbsent(salaryAcctEmployeePO.getEmployeeId() + "_" + salaryAcctEmployeePO.getTaxAgentId(), + k -> Lists.newArrayList()); + formulaVarValues.addAll(tempMap.getOrDefault(salaryAcctEmployeePO.getEmployeeId(), Collections.emptyList())); + } + } + /** * 根据调薪计薪规则处理薪资档案的调薪,转换成公式编辑器中的变量 * diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java index 22af2b674..afba2a327 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java @@ -1,6 +1,7 @@ package com.engine.salary.entity.salaryacct.bo; import com.engine.salary.entity.datacollection.dto.AttendQuoteFieldListDTO; +import com.engine.salary.entity.datacollection.po.VariableItemPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; @@ -125,6 +126,11 @@ public class SalaryAcctCalculateBO { */ private TaxDeclarationFunctionEnum taxDeclarationFunction; + /** + * 浮动薪资字段 + */ + private List variableItems; + @Data @AllArgsConstructor public static class Result { diff --git a/src/com/engine/salary/enums/salaryformula/SalaryFormulaReferenceEnum.java b/src/com/engine/salary/enums/salaryformula/SalaryFormulaReferenceEnum.java index 8cf79c880..da3b76213 100644 --- a/src/com/engine/salary/enums/salaryformula/SalaryFormulaReferenceEnum.java +++ b/src/com/engine/salary/enums/salaryformula/SalaryFormulaReferenceEnum.java @@ -26,6 +26,7 @@ public enum SalaryFormulaReferenceEnum implements BaseEnum { OTHER_DEDUCTION("otherDeduction", "其他免税扣除", 93849), SALARY_ACCT_EMPLOYEE("salaryAcctEmployee", "核算基本信息", 85368), SALARY_CYCLE("SalaryCycle", "核算日期", 85368), + VARIABLE_ITEM("variableItem", "浮动薪资项目", 0), ISSUED("ISSUED", "已发", 0); private String value; diff --git a/src/com/engine/salary/mapper/datacollection/VariableArchiveItemMapper.java b/src/com/engine/salary/mapper/datacollection/VariableArchiveItemMapper.java new file mode 100644 index 000000000..3b2e89f34 --- /dev/null +++ b/src/com/engine/salary/mapper/datacollection/VariableArchiveItemMapper.java @@ -0,0 +1,87 @@ +package com.engine.salary.mapper.datacollection; + +import com.engine.salary.entity.datacollection.po.VariableArchiveItemPO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author Harryxzy + * @ClassName VariableArchiveItemMapper + * @date 2024/08/07 9:22 + * @description 浮动薪酬档案明细 + */ +public interface VariableArchiveItemMapper { + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + /** + * 条件查询 + * + * @return 返回集合,没有返回空List + */ + List listSome(@Param("param") VariableArchiveItemPO variableArchiveItem); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + VariableArchiveItemPO getById(Long id); + + /** + * 新增,忽略null字段 + * + * @param variableArchiveItem 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(VariableArchiveItemPO variableArchiveItem); + + /** + * 修改,修改所有字段 + * + * @param variableArchiveItem 修改的记录 + * @return 返回影响行数 + */ + int update(VariableArchiveItemPO variableArchiveItem); + + /** + * 修改,忽略null字段 + * + * @param variableArchiveItem 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(VariableArchiveItemPO variableArchiveItem); + + /** + * 删除记录 + * + * @param variableArchiveItem 待删除的记录 + * @return 返回影响行数 + */ + int delete(VariableArchiveItemPO variableArchiveItem); + + /** + * 查询浮动薪酬档案中已使用的浮动薪资项目 + * + * @return + */ + List listUsingItems(); + + /** + * + * @param insertList + * @return + */ + int batchInsert(@Param("collection") List insertList); + + void deleteByIds(@Param("collection")List part); + + void deleteByArchiveIds(@Param("collection")List part); +} diff --git a/src/com/engine/salary/mapper/datacollection/VariableArchiveItemMapper.xml b/src/com/engine/salary/mapper/datacollection/VariableArchiveItemMapper.xml new file mode 100644 index 000000000..6c6c83c84 --- /dev/null +++ b/src/com/engine/salary/mapper/datacollection/VariableArchiveItemMapper.xml @@ -0,0 +1,349 @@ + + + + + + + + + + + + + + + + + + + t.id + , t.employee_id + , t.variable_archive_id + , t.variable_item_id + , t.item_value + , t.create_time + , t.update_time + , t.creator + , t.delete_type + , t.tenant_key + + + + + + + + + + + + + + + + + INSERT INTO hrsa_variable_archive_item + + + + id, + + + employee_id, + + + variable_archive_id, + + + variable_item_id, + + + item_value, + + + create_time, + + + update_time, + + + creator, + + + delete_type, + + + tenant_key, + + + + + #{id}, + + + #{employeeId}, + + + #{variableArchiveId}, + + + #{variableItemId}, + + + #{itemValue}, + + + #{createTime}, + + + #{updateTime}, + + + #{creator}, + + + #{deleteType}, + + + #{tenantKey}, + + + + + + INSERT INTO hrsa_variable_archive_item ( + id + , employee_id + , variable_archive_id + , variable_item_id + , item_value + , create_time + , update_time + , creator + , delete_type + , tenant_key + ) + VALUES + + ( + #{item.id}, + #{item.employeeId}, + #{item.variableArchiveId}, + #{item.variableItemId}, + #{item.itemValue}, + #{item.createTime}, + #{item.updateTime}, + #{item.creator}, + #{item.deleteType}, + #{item.tenantKey} + ) + + + + INSERT INTO hrsa_variable_archive_item ( + id + , employee_id + , variable_archive_id + , variable_item_id + , item_value + , create_time + , update_time + , creator + , delete_type + , tenant_key + ) + + + select + #{item.id,jdbcType=DOUBLE}, + #{item.employeeId,jdbcType=DOUBLE}, + #{item.variableArchiveId,jdbcType=DOUBLE}, + #{item.variableItemId,jdbcType=DOUBLE}, + #{item.itemValue,jdbcType=VARCHAR}, + #{item.createTime,jdbcType=DATE}, + #{item.updateTime,jdbcType=DATE}, + #{item.creator,jdbcType=DOUBLE}, + #{item.deleteType,jdbcType=INTEGER}, + #{item.tenantKey,jdbcType=VARCHAR} + from dual + + + + + INSERT INTO hrsa_variable_archive_item ( + id + , employee_id + , variable_archive_id + , variable_item_id + , item_value + , create_time + , update_time + , creator + , delete_type + , tenant_key + ) + VALUES + ( + #{item.id}, + #{item.employeeId}, + #{item.variableArchiveId}, + #{item.variableItemId}, + #{item.itemValue}, + #{item.createTime}, + #{item.updateTime}, + #{item.creator}, + #{item.deleteType}, + #{item.tenantKey} + ) + + + + + + UPDATE hrsa_variable_archive_item + + employee_id=#{employeeId}, + variable_archive_id=#{variableArchiveId}, + variable_item_id=#{variableItemId}, + item_value=#{itemValue}, + create_time=#{createTime}, + update_time=#{updateTime}, + creator=#{creator}, + delete_type=#{deleteType}, + tenant_key=#{tenantKey}, + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_variable_archive_item + + + employee_id=#{employeeId}, + + + variable_archive_id=#{variableArchiveId}, + + + variable_item_id=#{variableItemId}, + + + item_value=#{itemValue}, + + + create_time=#{createTime}, + + + update_time=#{updateTime}, + + + creator=#{creator}, + + + delete_type=#{deleteType}, + + + tenant_key=#{tenantKey}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_variable_archive_item + SET delete_type=1 + WHERE id = #{id} AND delete_type = 0 + + + + UPDATE hrsa_variable_archive_item + SET delete_type=1 + WHERE delete_type = 0 + + AND id IN + + #{id} + + + + + + UPDATE hrsa_variable_archive_item + SET delete_type=1 + WHERE delete_type = 0 + + AND variable_archive_id IN + + #{id} + + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/mapper/datacollection/VariableArchiveMapper.java b/src/com/engine/salary/mapper/datacollection/VariableArchiveMapper.java new file mode 100644 index 000000000..635c22d98 --- /dev/null +++ b/src/com/engine/salary/mapper/datacollection/VariableArchiveMapper.java @@ -0,0 +1,81 @@ +package com.engine.salary.mapper.datacollection; + +import com.engine.salary.entity.datacollection.dto.VariableArchiveListDTO; +import com.engine.salary.entity.datacollection.param.VariableArchiveQueryParam; +import com.engine.salary.entity.datacollection.po.VariableArchivePO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author Harryxzy + * @ClassName VariableArchiveMapper + * @date 2024/08/07 9:18 + * @description 浮动薪酬档案 + */ +public interface VariableArchiveMapper { + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + /** + * 条件查询 + * + * @return 返回集合,没有返回空List + */ + List listSome(VariableArchivePO variableArchive); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + VariableArchivePO getById(Long id); + + /** + * 新增,忽略null字段 + * + * @param variableArchive 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(VariableArchivePO variableArchive); + + /** + * 修改,修改所有字段 + * + * @param variableArchive 修改的记录 + * @return 返回影响行数 + */ + int update(VariableArchivePO variableArchive); + + /** + * 修改,忽略null字段 + * + * @param variableArchive 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(VariableArchivePO variableArchive); + + /** + * 删除记录 + * + * @param variableArchive 待删除的记录 + * @return 返回影响行数 + */ + int delete(VariableArchivePO variableArchive); + + /** + * 删除记录 + * + * @param variableArchiveIds 待删除的记录id + * @return 返回影响行数 + */ + int deleteByIds(@Param("ids")List variableArchiveIds); + + List list(@Param("param")VariableArchiveQueryParam queryParam); +} diff --git a/src/com/engine/salary/mapper/datacollection/VariableArchiveMapper.xml b/src/com/engine/salary/mapper/datacollection/VariableArchiveMapper.xml new file mode 100644 index 000000000..ff279f29c --- /dev/null +++ b/src/com/engine/salary/mapper/datacollection/VariableArchiveMapper.xml @@ -0,0 +1,366 @@ + + + + + + + + + + + + + + + + + t.id + , t.employee_id + , t.salary_month + , t.create_time + , t.update_time + , t.creator + , t.delete_type + , t.tenant_key + + + + + + + + + + + + + + t.id + , t.employee_id + , t.salary_month + , t.create_time + , t.update_time + , t.creator + , t.delete_type + , e.mobile + , e.workcode + , e.certificatenum as idNo + , e.lastname as username + , e.certificatenum as idNo + , e.companystartdate as companystartdate + , e.enddate as dismissdate + , d.departmentname AS departmentName + , c.subcompanyname AS subcompanyName + + + + + + + + + + INSERT INTO hrsa_variable_archive + + + + id, + + + employee_id, + + + salary_month, + + + create_time, + + + update_time, + + + creator, + + + delete_type, + + + tenant_key, + + + + + #{id}, + + + #{employeeId}, + + + #{salaryMonth}, + + + #{createTime}, + + + #{updateTime}, + + + #{creator}, + + + #{deleteType}, + + + #{tenantKey}, + + + + + + + + + UPDATE hrsa_variable_archive + + employee_id=#{employeeId}, + salary_month=#{salaryMonth}, + create_time=#{createTime}, + update_time=#{updateTime}, + creator=#{creator}, + delete_type=#{deleteType}, + tenant_key=#{tenantKey}, + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_variable_archive + + + employee_id=#{employeeId}, + + + salary_month=#{salaryMonth}, + + + create_time=#{createTime}, + + + update_time=#{updateTime}, + + + creator=#{creator}, + + + delete_type=#{deleteType}, + + + tenant_key=#{tenantKey}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_variable_archive + SET delete_type=1 + WHERE id = #{id} AND delete_type = 0 + + + + UPDATE hrsa_variable_archive + SET delete_type=1 + WHERE delete_type = 0 + AND id IN + + #{id} + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/mapper/datacollection/VariableItemMapper.java b/src/com/engine/salary/mapper/datacollection/VariableItemMapper.java new file mode 100644 index 000000000..a886e64c3 --- /dev/null +++ b/src/com/engine/salary/mapper/datacollection/VariableItemMapper.java @@ -0,0 +1,68 @@ +package com.engine.salary.mapper.datacollection; + +import com.engine.salary.entity.datacollection.po.VariableItemPO; + +import java.util.List; + +/** + * @author Harryxzy + * @ClassName VariableItemMapper + * @date 2024/08/07 9:26 + * @description 浮动薪酬项目 + */ +public interface VariableItemMapper { + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + /** + * 条件查询 + * + * @return 返回集合,没有返回空List + */ + List listSome(VariableItemPO variableItem); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + VariableItemPO getById(Long id); + + /** + * 新增,忽略null字段 + * + * @param variableItem 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(VariableItemPO variableItem); + + /** + * 修改,修改所有字段 + * + * @param variableItem 修改的记录 + * @return 返回影响行数 + */ + int update(VariableItemPO variableItem); + + /** + * 修改,忽略null字段 + * + * @param variableItem 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(VariableItemPO variableItem); + + /** + * 删除记录 + * + * @param variableItem 待删除的记录 + * @return 返回影响行数 + */ + int delete(VariableItemPO variableItem); +} diff --git a/src/com/engine/salary/mapper/datacollection/VariableItemMapper.xml b/src/com/engine/salary/mapper/datacollection/VariableItemMapper.xml new file mode 100644 index 000000000..f7b634091 --- /dev/null +++ b/src/com/engine/salary/mapper/datacollection/VariableItemMapper.xml @@ -0,0 +1,210 @@ + + + + + + + + + + + + + + + + + + t.id + , t.name + , t.code + , t.data_type + , t.create_time + , t.update_time + , t.creator + , t.delete_type + , t.tenant_key + + + + + + + + + + + + + + + INSERT INTO hrsa_variable_item + + + + id, + + + name, + + + code, + + + data_type, + + + create_time, + + + update_time, + + + creator, + + + delete_type, + + + tenant_key, + + + + + #{id}, + + + #{name}, + + + #{code}, + + + #{dataType}, + + + #{createTime}, + + + #{updateTime}, + + + #{creator}, + + + #{deleteType}, + + + #{tenantKey}, + + + + + + + UPDATE hrsa_variable_item + + name=#{name}, + code=#{code}, + data_type=#{dataType}, + create_time=#{createTime}, + update_time=#{updateTime}, + creator=#{creator}, + delete_type=#{deleteType}, + tenant_key=#{tenantKey}, + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_variable_item + + + name=#{name}, + + + code=#{code}, + + + data_type=#{dataType}, + + + create_time=#{createTime}, + + + update_time=#{updateTime}, + + + creator=#{creator}, + + + delete_type=#{deleteType}, + + + tenant_key=#{tenantKey}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_variable_item + SET delete_type=1 + WHERE id = #{id} AND delete_type = 0 + + + + \ No newline at end of file diff --git a/src/com/engine/salary/service/VariableArchiveItemService.java b/src/com/engine/salary/service/VariableArchiveItemService.java new file mode 100644 index 000000000..fd9dcee4e --- /dev/null +++ b/src/com/engine/salary/service/VariableArchiveItemService.java @@ -0,0 +1,35 @@ +package com.engine.salary.service; + +import com.engine.salary.entity.datacollection.po.VariableArchiveItemPO; + +import java.util.List; + +/** + * @author Harryxzy + * @ClassName VariableArchiveItemService + * @date 2024/08/07 9:29 + * @description 浮动薪资档案明细值 + */ +public interface VariableArchiveItemService { + + /** + * 根据浮动薪资档案id获取 + * + * @param variableArchiveIds + * @return + */ + List listByVariableArchiveIds(List variableArchiveIds); + + /** + * 查询浮动薪酬档案中已使用的浮动薪资项目 + * + * @return + */ + List listUsingItems(); + + int batchInsert(List variableArchiveItemList); + + void deleteByIds(List variableArchiveItemIds); + + void deleteByArchiveIds(List variableArchiveIds); +} diff --git a/src/com/engine/salary/service/VariableArchiveService.java b/src/com/engine/salary/service/VariableArchiveService.java new file mode 100644 index 000000000..0360b892f --- /dev/null +++ b/src/com/engine/salary/service/VariableArchiveService.java @@ -0,0 +1,72 @@ +package com.engine.salary.service; + +import com.engine.salary.entity.datacollection.dto.VariableArchiveListDTO; +import com.engine.salary.entity.datacollection.dto.VariableItemListDTO; +import com.engine.salary.entity.datacollection.param.VariableArchiveImportHandleParam; +import com.engine.salary.entity.datacollection.param.VariableArchiveQueryParam; +import com.engine.salary.entity.datacollection.param.VariableArchiveSaveParam; +import com.engine.salary.util.page.PageInfo; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.time.YearMonth; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 数据采集-浮动薪酬 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author xzy + * @version 1.0 + **/ +public interface VariableArchiveService { + + /** + * 查询浮动薪酬档案(分页) + * + * @param queryParam + * @return + */ + PageInfo listPage(VariableArchiveQueryParam queryParam); + + List list(VariableArchiveQueryParam queryParam); + + /** + * 构建浮动薪资档案数据 + * + * @param variableArchives + * @return + */ + List> buildVariableArchiveData(Collection variableArchives); + + /** + * 创建浮动薪酬档案 + * + * @param saveParam + */ + void createData(VariableArchiveSaveParam saveParam); + + /** + * 浮动薪资档案明细 + * + * @param queryParam + * @return + */ + Map getDetail(VariableArchiveQueryParam queryParam); + + List getCreateForm(); + + XSSFWorkbook downloadTemplate(VariableArchiveQueryParam param); + + Map preview(VariableArchiveImportHandleParam importParam); + + Map importData(VariableArchiveImportHandleParam importParam); + + XSSFWorkbook export(VariableArchiveQueryParam param); + + void deleteSelectVariableArchive(Collection deleteIds); + + List> listBySalaryMonthAndEmployeeIds(YearMonth salaryMonth, List employeeIds); +} diff --git a/src/com/engine/salary/service/VariableItemService.java b/src/com/engine/salary/service/VariableItemService.java new file mode 100644 index 000000000..ef2dade37 --- /dev/null +++ b/src/com/engine/salary/service/VariableItemService.java @@ -0,0 +1,66 @@ +package com.engine.salary.service; + +import com.engine.salary.entity.datacollection.dto.VariableItemListDTO; +import com.engine.salary.entity.datacollection.param.VariableItemQueryParam; +import com.engine.salary.entity.datacollection.param.VariableItemSaveParam; +import com.engine.salary.entity.datacollection.po.VariableItemPO; +import com.engine.salary.util.page.PageInfo; + +import java.util.List; + +/** + * @author Harryxzy + * @ClassName VariableItemService + * @date 2024/08/07 9:30 + * @description 浮动薪酬项目 + */ +public interface VariableItemService { + + VariableItemPO getById(Long id); + + List listByIds(List ids); + + /** + * 获取所有的浮动薪酬项目 + * + * @return + */ + List listAll(); + + /** + * 获取浮动薪资项目列表(分页) + * + * @param queryParam + * @return + */ + PageInfo listPage(VariableItemQueryParam queryParam); + + /** + * 新建浮动薪酬项目 + * + * @param saveParam + */ + Integer save(VariableItemSaveParam saveParam); + + /** + * 更新浮动薪酬项目 + * + * @param saveParam + */ + VariableItemPO update(VariableItemSaveParam saveParam); + + /** + * 删除浮动薪资项目 + * + * @param itemIds + */ + void deleteItems(List itemIds); + + /** + * 浮动薪酬项目详细信息 + * + * @param id + * @return + */ + VariableItemListDTO getDetail(Long id); +} diff --git a/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java b/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java index 57a098cca..b0424ad47 100644 --- a/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java @@ -10,6 +10,7 @@ import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.datacollection.dto.AttendQuoteFieldListDTO; import com.engine.salary.entity.datacollection.param.AttendQuoteFieldQueryParam; import com.engine.salary.entity.datacollection.po.OtherDeductionPO; +import com.engine.salary.entity.datacollection.po.VariableItemPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryformula.dto.SalaryFormulaTaxRateDTO; import com.engine.salary.entity.salaryformula.po.FormulaVar; @@ -77,6 +78,10 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic return (SalarySobItemService) ServiceUtil.getService(SalarySobItemServiceImpl.class, user); } + private VariableItemService getVariableItemService(User user) { + return ServiceUtil.getService(VariableItemServiceImpl.class, user); + } + // @Override // public ExcelResult aggregation(AggFunc func, String sourceId, String fieldId, List filterFormDataList, Map extendParam, // DataCollectionEmployee employee) { @@ -166,6 +171,9 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic case SALARY_CYCLE: vars = convert2FormulaVar(SalarySobCycleDTO.class, referenceEnum.getValue() + ""); break; + case VARIABLE_ITEM: + vars = variableArchives2FormulaVar(referenceEnum, extendParam); + break; default: break; } @@ -251,6 +259,8 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic convert2FormulaVar(SalaryAcctEmployeePO.class, SalarySQLReferenceEnum.SALARY_ACCT_EMPLOYEE.getValue() + "")); result.put(SalarySQLReferenceEnum.SALARY_CYCLE.getDefaultLabel(), convert2FormulaVar(SalarySobCycleDTO.class, SalarySQLReferenceEnum.SALARY_CYCLE.getValue() + "")); + result.put(SalaryFormulaReferenceEnum.VARIABLE_ITEM.getDefaultLabel(), + variableArchives2FormulaVar(SalaryFormulaReferenceEnum.VARIABLE_ITEM, null)); return result; } return result; @@ -402,6 +412,20 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic }).collect(Collectors.toList()); } + private List variableArchives2FormulaVar(SalaryFormulaReferenceEnum referenceEnum, Map extendParam) { + List variableItems; + variableItems = getVariableItemService(user).listAll(); + return variableItems.stream() + .map(e -> { + FormulaVar formulaVar = new FormulaVar(); + formulaVar.setFieldId(referenceEnum.getValue() + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + e.getCode()); + formulaVar.setName(e.getName()); + formulaVar.setSource("" + referenceEnum.getValue()); + formulaVar.setFieldType(e.getDataType()); + return formulaVar; + }).collect(Collectors.toList()); + } + private List convert2FormulaVar(Class clazz, String formId) { Field[] declaredFields = clazz.getDeclaredFields(); List formulaVars = Lists.newArrayListWithExpectedSize(declaredFields.length); diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index 09927a388..727d9b13b 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -110,6 +110,10 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc return ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user); } + private VariableArchiveService getVariableArchiveService(User user) { + return ServiceUtil.getService(VariableArchiveServiceImpl.class, user); + } + @Override public void calculate(SalaryAcctCalculateBO salaryAcctCalculateBO, DataCollectionEmployee simpleEmployee, List salarySobBackItems) { StopWatch sw = new StopWatch("核算耗时明细,id:" + salaryAcctCalculateBO.getSalaryAcctRecordPO().getId() + ""); @@ -158,6 +162,10 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc List salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctCalculateBO.getSalaryAcctEmployeePOS(), SalaryAcctEmployeePO::getId, Collectors.toList()); List salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); sw.stop(); + // 查询浮动薪资 + sw.start("查询浮动薪资"); + List> variableArchiveList = getVariableArchiveService(user).listBySalaryMonthAndEmployeeIds(salarySobCycleDTO.getSalaryMonth(), employeeIds); + sw.stop(); // 薪资回算时回算前的核算结果 (没有回算项) sw.start("查询薪资回算时回算前的核算结果"); Map> collect = salaryAcctResultPOS.stream().collect(Collectors.groupingBy(k -> k.getEmployeeId() + "-" + k.getTaxAgentId() + "-" + k.getSalaryItemId())); @@ -181,7 +189,7 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc sw.stop(); // 10、转换成公式编辑器中的变量 sw.start("转换成公式编辑器中的变量"); - CalculateFormulaVarBO calculateFormulaVarBO = new CalculateFormulaVarBO(simpleEmployees, salaryArchiveData, addUpSituationPOS, addUpDeductionPOS, otherDeductionPOS, welfareData, attendQuoteDataDTOS, salaryAcctResultPOS); + CalculateFormulaVarBO calculateFormulaVarBO = new CalculateFormulaVarBO(simpleEmployees, salaryArchiveData, addUpSituationPOS, addUpDeductionPOS, otherDeductionPOS, welfareData, attendQuoteDataDTOS, salaryAcctResultPOS, variableArchiveList); Map> formulaVarMap = calculateFormulaVarBO.convert2FormulaVar(salaryAcctCalculateBO); sw.stop(); sw.start("数据结构准备"); @@ -211,6 +219,9 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc for (List salaryItemIds : salaryAcctCalculateBO.getSalaryItemIdWithPriorityList()) { // 同一运算优先级下的薪资项目逐个独立运算 for (Long salaryItemId : salaryItemIds) { + if (salaryItemId.equals(1723115683903L)) { + System.out.println("d"); + } String resultValue; SalaryItemPO salaryItemPO = salaryItemMap.get(salaryItemId); ExpressFormula expressFormula; diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 36f19b6f6..60d81063f 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -11,6 +11,7 @@ import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.datacollection.dto.AttendQuoteFieldListDTO; +import com.engine.salary.entity.datacollection.po.VariableItemPO; import com.engine.salary.entity.hrm.DeptInfo; import com.engine.salary.entity.hrm.JobCallInfo; import com.engine.salary.entity.hrm.PositionInfo; @@ -191,6 +192,10 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe return ServiceUtil.getService(TaxAgentAdminServiceImpl.class, user); } + private VariableItemService getVariableItemService(User user) { + return ServiceUtil.getService(VariableItemServiceImpl.class, user); + } + private SalaryCheckResultService salaryCheckResultService; private SalaryAcctSobConfigService getSalaryAcctSobConfigService(User user) { @@ -803,6 +808,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe Map welfareColumns = getSIAccountService(user).welfareColumns(); // 7、查询考勤引用的所有字段 List attendQuoteFieldListDTOS = getAttendQuoteFieldService(user).listAll(); + List variableItemPOS = getVariableItemService(user).listAll(); // 8、查询公式详情 Set formulaIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getFormulaId); @@ -877,6 +883,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe .setChildMonitor(childMonitor) .setResults(calculateResults) .setCalculateKey(calculateKey) + .setVariableItems(variableItemPOS) .setTaxDeclarationFunction(taxDeclarationFunction); List finalSalarySobBackItems = salarySobBackItems; LocalRunnable localRunnable = new LocalRunnable() { diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index a63bec4e6..798ff8146 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -407,6 +407,7 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService List formulaVars = getSalaryFormulaService(user).listVarByFormulaIds(usingFormulaIds); List itemCode = formulaVars.stream() .map(FormulaVar::getFieldId) + .map(v -> v.replaceAll("variableItem_", "")) .map(v -> v.replaceAll("salaryItem_", "")) .map(v -> v.replaceAll("salaryArchives_", "")) .map(v -> v.replaceAll("ISSUED_", "")) diff --git a/src/com/engine/salary/service/impl/VariableArchiveItemServiceImpl.java b/src/com/engine/salary/service/impl/VariableArchiveItemServiceImpl.java new file mode 100644 index 000000000..15332c159 --- /dev/null +++ b/src/com/engine/salary/service/impl/VariableArchiveItemServiceImpl.java @@ -0,0 +1,73 @@ +package com.engine.salary.service.impl; + +import com.engine.core.impl.Service; +import com.engine.salary.entity.datacollection.po.VariableArchiveItemPO; +import com.engine.salary.mapper.datacollection.VariableArchiveItemMapper; +import com.engine.salary.service.VariableArchiveItemService; +import com.engine.salary.util.db.MapperProxyFactory; +import com.google.common.collect.Lists; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.Collections; +import java.util.List; + +/** + * @author Harryxzy + * @ClassName VariableArchiveItemServiceImpl + * @date 2024/08/07 9:29 + * @description 浮动薪酬档案明细 + */ +public class VariableArchiveItemServiceImpl extends Service implements VariableArchiveItemService { + + private VariableArchiveItemMapper getVariableArchiveItemMapper(){ + return MapperProxyFactory.getProxy(VariableArchiveItemMapper.class); + } + + /** + * 根据浮动薪资档案id获取 + * + * @param variableArchiveIds + * @return + */ + @Override + public List listByVariableArchiveIds(List variableArchiveIds) { + if (CollectionUtils.isEmpty(variableArchiveIds)) { + return Collections.emptyList(); + } + return getVariableArchiveItemMapper().listSome(VariableArchiveItemPO.builder().variableArchiveIds(variableArchiveIds).build()); + } + + /** + * 查询浮动薪酬档案中已使用的浮动薪资项目 + * + * @return + */ + @Override + public List listUsingItems() { + return getVariableArchiveItemMapper().listUsingItems(); + } + + @Override + public int batchInsert(List insertList) { + return getVariableArchiveItemMapper().batchInsert(insertList); + } + + @Override + public void deleteByArchiveIds(List variableArchiveIds) { + if (CollectionUtils.isEmpty(variableArchiveIds)) { + return; + } + List> partition = Lists.partition(variableArchiveIds, 500); + partition.forEach(part -> getVariableArchiveItemMapper().deleteByArchiveIds(part)); + } + + @Override + public void deleteByIds(List variableArchiveItemIds) { + if (CollectionUtils.isEmpty(variableArchiveItemIds)) { + return; + } + List> partition = Lists.partition(variableArchiveItemIds, 500); + partition.forEach(part -> getVariableArchiveItemMapper().deleteByIds(part)); + + } +} diff --git a/src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java b/src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java new file mode 100644 index 000000000..801e7ad7e --- /dev/null +++ b/src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java @@ -0,0 +1,567 @@ +package com.engine.salary.service.impl; + +import com.cloudstore.eccom.pc.table.WeaTableColumn; +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.constant.SalaryItemConstant; +import com.engine.salary.entity.datacollection.bo.VariableArchiveBO; +import com.engine.salary.entity.datacollection.bo.VariableArchiveExcelBO; +import com.engine.salary.entity.datacollection.dto.VariableArchiveListDTO; +import com.engine.salary.entity.datacollection.dto.VariableItemListDTO; +import com.engine.salary.entity.datacollection.param.VariableArchiveImportHandleParam; +import com.engine.salary.entity.datacollection.param.VariableArchiveQueryParam; +import com.engine.salary.entity.datacollection.param.VariableArchiveSaveParam; +import com.engine.salary.entity.datacollection.po.VariableArchiveItemPO; +import com.engine.salary.entity.datacollection.po.VariableArchivePO; +import com.engine.salary.entity.datacollection.po.VariableItemPO; +import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveInitImportDTO; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.datacollection.UseEmployeeTypeEnum; +import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.datacollection.VariableArchiveMapper; +import com.engine.salary.service.*; +import com.engine.salary.sys.entity.vo.OrderRuleVO; +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; +import com.engine.salary.util.db.IdGenerator; +import com.engine.salary.util.db.MapperProxyFactory; +import com.engine.salary.util.excel.ExcelComment; +import com.engine.salary.util.excel.ExcelParseHelper; +import com.engine.salary.util.excel.ExcelSupport; +import com.engine.salary.util.excel.ExcelUtilPlus; +import com.engine.salary.util.page.PageInfo; +import com.engine.salary.util.page.SalaryPageUtil; +import com.engine.salary.util.valid.ValidUtil; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.util.IOUtils; +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.time.YearMonth; +import java.util.*; +import java.util.stream.Collectors; + +import static com.engine.salary.util.excel.ExcelSupport.EXCEL_TYPE_XLSX; + +/** + * @author Harryxzy + * @ClassName VariableArchiveServiceImpl + * @date 2024/08/06 17:40 + * @description 浮动薪酬档案 + */ +public class VariableArchiveServiceImpl extends Service implements VariableArchiveService { + + private VariableArchiveMapper getVariableArchiveMapper(){ + return MapperProxyFactory.getProxy(VariableArchiveMapper.class); + } + + private TaxAgentService getTaxAgentService(User user) { + return ServiceUtil.getService(TaxAgentServiceImpl.class, user); + } + + public SalarySysConfService getSalarySysConfService(User user) { + return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); + } + + private VariableArchiveItemService getVariableArchiveItemService(User user) { + return ServiceUtil.getService(VariableArchiveItemServiceImpl.class, user); + } + + private VariableItemService getVariableItemService(User user) { + return ServiceUtil.getService(VariableItemServiceImpl.class, user); + } + + private SalaryEmployeeService getSalaryEmployeeService(User user) { + return (SalaryEmployeeService) ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); + } + + private int deleteByIds(List deleteIds) { + if (CollectionUtils.isEmpty(deleteIds)) { + return 0; + } + return getVariableArchiveMapper().deleteByIds(deleteIds); + } + + /** + * 浮动薪酬档案列表 + * @param queryParam + * @return + */ + @Override + public PageInfo listPage(VariableArchiveQueryParam queryParam) { + List variableArchiveList = list(queryParam); + return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), variableArchiveList, VariableArchiveListDTO.class); + } + + @Override + public List list(VariableArchiveQueryParam queryParam) { + ValidUtil.doValidator(queryParam); + Long employeeId = Long.valueOf(user.getUID()); + // 判断是否是“总管理员” + Boolean isChief = getTaxAgentService(user).isChief(employeeId); + // 是否开启分权 + Boolean openDevolution = getTaxAgentService(user).isOpenDevolution(); + Collection taxAgentPOS = getTaxAgentService(user).listAllTaxAgentsAsAdmin(employeeId); + if (BooleanUtils.isTrue(openDevolution) && !isChief && CollectionUtils.isEmpty(taxAgentPOS)) { + // 无权限 + return Collections.emptyList(); + } + + // 浮动薪酬档案列表 + if (Objects.nonNull(queryParam.getSalaryMonth())) { + queryParam.setSalaryMonthDate(SalaryDateUtil.dateStrToLocalYearMonth(queryParam.getSalaryMonth())); + } + //排序配置 + OrderRuleVO orderRule = getSalarySysConfService(user).orderRule(); + queryParam.setOrderRule(orderRule); + return getVariableArchiveMapper().list(queryParam); + } + + /** + * 构建浮动薪资档案数据 + * + * @param variableArchives + * @return + */ + @Override + public List> buildVariableArchiveData(Collection variableArchives) { + if (CollectionUtils.isEmpty(variableArchives)) { + // 无数据 + } + List variableArchiveIds = variableArchives.stream().map(VariableArchiveListDTO::getId).collect(Collectors.toList()); + // 获取浮动薪资档案所对应的浮动薪资项目数据 + List variableArchiveItemList= getVariableArchiveItemService(user).listByVariableArchiveIds(variableArchiveIds); + Map> variableArchiveItemMap = SalaryEntityUtil.group2Map(variableArchiveItemList, VariableArchiveItemPO::getVariableArchiveId); + List> variableArchiveItemData = variableArchives.stream().map(m -> { + Map map = Maps.newHashMap(); + map.put("variableArchiveId", m.getId()); + List variableArchiveItemValuelList = variableArchiveItemMap.getOrDefault(m.getId(), Collections.emptyList()); + variableArchiveItemValuelList.forEach(i -> { + map.put(i.getVariableItemId() + SalaryItemConstant.VARIABLE_ITEM_DYNAMIC_SUFFIX, i.getItemValue()); + }); + return map; + }).collect(Collectors.toList()); + + + // 组装数据 + List> listMaps = new ArrayList<>(); + variableArchives.forEach(e -> { + Map map = new LinkedHashMap<>(); + map.put("id", e.getId()); + map.put("username", e.getUsername()); + map.put("salaryMonth", SalaryDateUtil.getFormatYearMonth(e.getSalaryMonth())); + map.put("employeeId", e.getEmployeeId()); + map.put("subcompanyName", e.getSubcompanyName()); + map.put("departmentName", e.getDepartmentName()); + map.put("mobile", e.getMobile()); + map.put("workcode", e.getWorkcode()); + map.put("idNo", e.getIdNo()); + map.put("companystartdate", e.getCompanystartdate()); + map.put("dismissdate", e.getDismissdate()); + + // 浮动薪资项目动态 + Optional> optionalItem = variableArchiveItemData.stream().filter(f -> f.get("variableArchiveId").toString().equals(e.getId().toString())).findFirst(); + optionalItem.ifPresent(map::putAll); + + listMaps.add(map); + }); + return listMaps; + } + + /** + * 创建浮动薪酬档案 + * + * @param saveParam + */ + @Override + public void createData(VariableArchiveSaveParam saveParam) { + ValidUtil.doValidator(saveParam); + saveParam.setSalaryMonthDate(SalaryDateUtil.dateStrToLocalYearMonth(saveParam.getSalaryMonth())); + List variableArchivePOList = getVariableArchiveMapper().listSome(VariableArchivePO.builder().salaryMonth(saveParam.getSalaryMonthDate()).employeeId(saveParam.getEmployeeId()).build()); + if (CollectionUtils.isNotEmpty(variableArchivePOList)) { + // 先删除原有档案 + List variableArchiveIds = variableArchivePOList.stream().map(VariableArchivePO::getId).collect(Collectors.toList()); + getVariableArchiveMapper().deleteByIds(variableArchiveIds); + } + + // 保存浮动薪资档案信息 + Date now = new Date(); + VariableArchivePO variableArchivePO = VariableArchivePO.builder() + .id(IdGenerator.generate()) + .employeeId(saveParam.getEmployeeId()) + .salaryMonth(saveParam.getSalaryMonthDate()) + .creator(Long.valueOf(user.getUID())) + .createTime(now) + .updateTime(now) + .deleteType(NumberUtils.INTEGER_ZERO) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build(); + getVariableArchiveMapper().insertIgnoreNull(variableArchivePO); + + // 保存浮动薪资档案详细信息 + List variableArchiveItemList = new ArrayList<>(); + saveParam.getItemValueList().forEach(e -> { + variableArchiveItemList.add(VariableArchiveItemPO.builder() + .id(IdGenerator.generate()) + .employeeId(saveParam.getEmployeeId()) + .variableArchiveId(variableArchivePO.getId()) + .variableItemId(e.getVariableItemId()) + .itemValue(e.getItemValue()) + .creator(Long.valueOf(user.getUID())) + .createTime(now) + .updateTime(now) + .deleteType(NumberUtils.INTEGER_ZERO) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build()); + }); + + if (CollectionUtils.isNotEmpty(variableArchiveItemList)) { + getVariableArchiveItemService(user).batchInsert(variableArchiveItemList); + } + } + + /** + * 浮动薪资档案明细 + * + * @param queryParam + * @return + */ + @Override + public Map getDetail(VariableArchiveQueryParam queryParam) { + if (queryParam.getId() == null) { + return Collections.emptyMap(); + } + + List variableArchiveList = getVariableArchiveMapper().list(queryParam); + + // 获取所有浮动薪酬项目 + List variableItems = getVariableItemService(user).listAll(); + + //整合所有的显示列(固定列+薪资项目动态列) + List> listMaps = buildVariableArchiveData(variableArchiveList); + Map resultMap = listMaps.get(0); + + //动态列组装 + List columns = VariableArchiveBO.buildVariableArchiveTable(variableItems); + + columns.add(0,new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(85429, "薪资所属月"), "salaryMonth")); + + Map datas = new HashMap<>(); + datas.put("data", resultMap); + datas.put("column", columns); + return datas; + } + + @Override + public List getCreateForm() { + List variableItemPOS = getVariableItemService(user).listAll(); + List variableItemDTOList = variableItemPOS.stream() + .map(po -> VariableItemListDTO.builder() + .id(po.getId()) + .name(po.getName()) + .build()) + .collect(Collectors.toList()); + return variableItemDTOList; + } + + @Override + public XSSFWorkbook downloadTemplate(VariableArchiveQueryParam param) { + // 名称 + String nameI18n = SalaryI18nUtil.getI18nLabel(0, "浮动薪酬导入模板"); + + // 获取所有可被引用的薪资项目 + List variableItems = getVariableItemService(user).listAll(); + List header = Lists.newArrayList(); + header.add(SalaryI18nUtil.getI18nLabel(85429, "姓名")); + header.add(SalaryI18nUtil.getI18nLabel(86185, "部门")); + header.add(SalaryI18nUtil.getI18nLabel(86186, "手机号")); + header.add(SalaryI18nUtil.getI18nLabel(1933, "工号")); + header.add(SalaryI18nUtil.getI18nLabel(86186, "证件号码")); + header.add(SalaryI18nUtil.getI18nLabel(86187, "入职日期")); + for (VariableItemPO variableItem : variableItems) { + header.add(variableItem.getName()); + } + + // 2.表头 + List> rows = new ArrayList<>(); + rows.add(header); + // 获取档案信息 + List variableArchiveList = list(param); + + if (param.isHasData()) { + List> listMaps = buildVariableArchiveData(variableArchiveList); + // 组装数据 + listMaps.forEach(e -> { + List row = new ArrayList<>(); + row.add(e.get("username").toString()); + row.add(Optional.ofNullable(e.get("departmentName")).orElse("").toString()); + row.add(e.get("mobile") == null ? "" : e.get("mobile").toString()); + row.add(Optional.ofNullable(e.get("workcode")).orElse("").toString()); + row.add(Util.null2String(e.get("idNo"))); + row.add(Util.null2String(e.get("companystartdate"))); + + // 薪资项目数据 + for (VariableItemPO variableItem : variableItems) { + row.add(e.containsKey(variableItem.getId() + SalaryItemConstant.VARIABLE_ITEM_DYNAMIC_SUFFIX) ? (e.get(variableItem.getId() + SalaryItemConstant.VARIABLE_ITEM_DYNAMIC_SUFFIX) == null ? "" + : e.get(variableItem.getId() + SalaryItemConstant.VARIABLE_ITEM_DYNAMIC_SUFFIX).toString()) : ""); + } + rows.add(row); + }); + } + + + // 4.注释 + List excelComments = Lists.newArrayList(); + + return ExcelUtilPlus.genWorkbookV2(rows, nameI18n, excelComments); + } + + @Override + public Map preview(VariableArchiveImportHandleParam importParam) { + Map apidatas = new HashMap(); + + //excel文件id + String imageId = Util.null2String(importParam.getImageId()); + + InputStream fileInputStream = null; + try { + fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(imageId)); + Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); + apidatas.put("headers", ExcelSupport.getSheetHeader(sheet, 0)); + apidatas.put("list", ExcelParseHelper.parse2List(sheet, 1, 0)); + return apidatas; + } finally { + IOUtils.closeQuietly(fileInputStream); + } + } + + @Override + public Map importData(VariableArchiveImportHandleParam importParam) { + // 初始化国际化标签 + VariableArchiveExcelBO.initI18n(); + // 校验参数 + checkImportParam(importParam); + String imageId = importParam.getImageId(); + // 构建导入处理参数 + importParam = buildImportHandleParam(importParam); + // 导入有重复 + List allTodoVariableArchives = Lists.newArrayList(); + + InputStream fileInputStream = null; + try { + fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(imageId)); + Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); + int total = 0; + //excel数据 + List> data = ExcelParseHelper.parse2Map(sheet, 1); + if (data != null) { + total += data.size(); + } + + int index = 0; + int successCount = 0; + int errorCount = 0; + // 用于(初始化导入)的相同employeeId时的处理 + List initImportData = Lists.newArrayList(); + + List headers = ExcelSupport.getSheetHeader(sheet, 0); + + // 错误提示 + List> excelComments = new ArrayList<>(); + // 错误sheet数据 + List> errorData = new ArrayList<>(); + + Map map; + for (int i = 0; i < data.size(); i++) { + index += 1; + map = data.get(i); + map.put("index", i + 2); + // 3.校验行内容 + boolean isError = VariableArchiveExcelBO.singleRowCheck(allTodoVariableArchives, map, headers, excelComments, errorCount, importParam, user); + if (isError) { + errorCount += 1; + // 添加错误数据 + errorData.add(map); + } else { + successCount += 1; + } + } + + // 4.数据入库处理 + handleImportData(importParam); + + Map apidatas = new HashMap<>(); + + apidatas.put("successCount", successCount); + apidatas.put("errorCount", errorCount); + apidatas.put("errorNotice", excelComments); + return apidatas; + } finally { + IOUtils.closeQuietly(fileInputStream); + } + } + + private void checkImportParam(VariableArchiveImportHandleParam importParam) { + //excel文件id + String imageId = Util.null2String(importParam.getImageId()); + //税款所属期 + String salaryMonthStr = Util.null2String(importParam.getSalaryMonth()); + if (StringUtils.isBlank(imageId)) { + throw new SalaryRunTimeException("文件不存在"); + } + if (StringUtils.isBlank(salaryMonthStr)) { + throw new SalaryRunTimeException("薪资所属月为空"); + } + } + + /** + * 构建导入处理参数 + * + * @param param + * @return + */ + private VariableArchiveImportHandleParam buildImportHandleParam(VariableArchiveImportHandleParam param) { + // 获取所有可被引用的浮动薪资项目 + List variableItems = getVariableItemService(user).listAll(); + Collection variableItemIds = variableItems.stream().map(VariableItemPO::getId).collect(Collectors.toList()); + List variableArchiveList = getVariableArchiveMapper().listSome(VariableArchivePO.builder().salaryMonth(SalaryDateUtil.dateStrToLocalYearMonth(param.getSalaryMonth())).build()); + + List variableArchiveIds = variableArchiveList.stream().map(VariableArchivePO::getId).collect(Collectors.toList()); + Map variableArchivesMap = SalaryEntityUtil.convert2Map(variableArchiveList, k -> k.getEmployeeId()); + + // 获取浮动薪资档案明细数据 + List variableArchiveItemPOS = getVariableArchiveItemService(user).listByVariableArchiveIds(variableArchiveIds); + Map> variableArchiveItemMap = SalaryEntityUtil.group2Map(variableArchiveItemPOS, k -> k.getVariableArchiveId() + "-" + k.getVariableItemId()); + + return VariableArchiveImportHandleParam.builder() + .imageId(param.getImageId()) + .salaryMonth(param.getSalaryMonth()) + .salaryMonthDate(SalaryDateUtil.dateStrToLocalYearMonth(param.getSalaryMonth())) + .currentEmployeeId((long) user.getUID()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + //人员定位方式 + .empValidType(getSalaryEmployeeService(user).empValidType()) + // 获取租户下所有的人员 + .employees(getSalaryEmployeeService(user).listAll(UseEmployeeTypeEnum.ORG)) + // 浮动薪资项目 + .variableItems(variableItems) + // 查询已有的浮动薪资档案基本数据 + .variableArchivesMap(variableArchivesMap) + // 浮动薪资项目id + .variableItemIds(variableItemIds) + // 查询已生效的浮动薪资项目数据 + .effectiveItemListMap(variableArchiveItemMap) + // 当前时间 + .nowTime(new Date()) + // 当天 + .today(new Date()) + // 待保存浮动薪资档案 + .variableArchiveSaves(Lists.newArrayList()) + // 待保存浮动薪资档案-浮动薪资项目 + .variableArchiveItemSaves(Lists.newArrayList()) + // 待删除浮动薪资档案-浮动薪资项目 + .variableArchiveItemDelSalaryItemIds(Lists.newArrayList()) + .build(); + } + + + private void handleImportData(VariableArchiveImportHandleParam importHandleParam) { + List variableArchiveSaves = importHandleParam.getVariableArchiveSaves(); + List variableArchiveItemSaves = importHandleParam.getVariableArchiveItemSaves(); + List variableArchiveItemDelSalaryItemIds = importHandleParam.getVariableArchiveItemDelSalaryItemIds(); + + // 新增档案 + if (CollectionUtils.isNotEmpty(variableArchiveSaves)) { + variableArchiveSaves.stream().forEach(getVariableArchiveMapper()::insertIgnoreNull); + } + // 薪资档案-薪资项目 + if (CollectionUtils.isNotEmpty(variableArchiveItemDelSalaryItemIds)) { + getVariableArchiveItemService(user).deleteByIds(variableArchiveItemDelSalaryItemIds); + } + // 薪资档案-薪资项目 + if (CollectionUtils.isNotEmpty(variableArchiveItemSaves)) { + getVariableArchiveItemService(user).batchInsert(variableArchiveItemSaves); + } + } + + @Override + public XSSFWorkbook export(VariableArchiveQueryParam param) { + // 名称 + String nameI18n = SalaryI18nUtil.getI18nLabel(0, "浮动薪酬"); + + // 获取所有可被引用的薪资项目 + List variableItems = getVariableItemService(user).listAll(); + List header = Lists.newArrayList(); + header.add(SalaryI18nUtil.getI18nLabel(85429, "姓名")); + header.add(SalaryI18nUtil.getI18nLabel(86185, "部门")); + header.add(SalaryI18nUtil.getI18nLabel(86186, "手机号")); + header.add(SalaryI18nUtil.getI18nLabel(1933, "工号")); + header.add(SalaryI18nUtil.getI18nLabel(86186, "证件号码")); + header.add(SalaryI18nUtil.getI18nLabel(86187, "入职日期")); + for (VariableItemPO variableItem : variableItems) { + header.add(variableItem.getName()); + } + + // 2.表头 + List> rows = new ArrayList<>(); + rows.add(header); + // 获取档案信息 + List variableArchiveList = list(param); + List> listMaps = buildVariableArchiveData(variableArchiveList); + // 组装数据 + listMaps.forEach(e -> { + List row = new ArrayList<>(); + row.add(e.get("username").toString()); + row.add(Optional.ofNullable(e.get("departmentName")).orElse("").toString()); + row.add(e.get("mobile") == null ? "" : e.get("mobile").toString()); + row.add(Optional.ofNullable(e.get("workcode")).orElse("").toString()); + row.add(Util.null2String(e.get("idNo"))); + row.add(Util.null2String(e.get("companystartdate"))); + + // 薪资项目数据 + for (VariableItemPO variableItem : variableItems) { + row.add(e.containsKey(variableItem.getId() + SalaryItemConstant.VARIABLE_ITEM_DYNAMIC_SUFFIX) ? (e.get(variableItem.getId() + SalaryItemConstant.VARIABLE_ITEM_DYNAMIC_SUFFIX) == null ? "" + : e.get(variableItem.getId() + SalaryItemConstant.VARIABLE_ITEM_DYNAMIC_SUFFIX).toString()) : ""); + } + rows.add(row); + }); + + // 4.注释 + List excelComments = Lists.newArrayList(); + + return ExcelUtilPlus.genWorkbookV2(rows, nameI18n, excelComments); + } + + @Override + public void deleteSelectVariableArchive(Collection deleteIds) { + if (CollectionUtils.isEmpty(deleteIds)) { + return; + } + List variableArchivePOList = getVariableArchiveMapper().listSome(VariableArchivePO.builder().ids(deleteIds).build()); + List archiveIds = variableArchivePOList.stream().map(VariableArchivePO::getId).collect(Collectors.toList()); + deleteByIds(archiveIds); + // 删除明细 + getVariableArchiveItemService(user).deleteByArchiveIds(archiveIds); + + } + + @Override + public List> listBySalaryMonthAndEmployeeIds(YearMonth salaryMonth, List employeeIds) { + VariableArchiveQueryParam queryParam = VariableArchiveQueryParam.builder().employeeIds(employeeIds).salaryMonth(SalaryDateUtil.getFormatYearMonth(salaryMonth)).salaryMonthDate(SalaryDateUtil.toDate(salaryMonth,1)).build(); + List variableArchiveListDTO = list(queryParam); + return buildVariableArchiveData(variableArchiveListDTO); + } +} diff --git a/src/com/engine/salary/service/impl/VariableItemServiceImpl.java b/src/com/engine/salary/service/impl/VariableItemServiceImpl.java new file mode 100644 index 000000000..b7b197ebc --- /dev/null +++ b/src/com/engine/salary/service/impl/VariableItemServiceImpl.java @@ -0,0 +1,245 @@ +package com.engine.salary.service.impl; + +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.entity.datacollection.dto.VariableItemListDTO; +import com.engine.salary.entity.datacollection.param.VariableItemQueryParam; +import com.engine.salary.entity.datacollection.param.VariableItemSaveParam; +import com.engine.salary.entity.datacollection.po.VariableItemPO; +import com.engine.salary.entity.salaryformula.po.FormulaPO; +import com.engine.salary.entity.salaryformula.po.FormulaVar; +import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; +import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.datacollection.VariableItemMapper; +import com.engine.salary.service.SalaryFormulaService; +import com.engine.salary.service.SalaryItemService; +import com.engine.salary.service.VariableArchiveItemService; +import com.engine.salary.service.VariableItemService; +import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.MapperProxyFactory; +import com.engine.salary.util.page.PageInfo; +import com.engine.salary.util.page.SalaryPageUtil; +import com.engine.salary.util.valid.RuntimeTypeEnum; +import com.engine.salary.util.valid.ValidUtil; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import org.springframework.beans.BeanUtils; +import weaver.conn.util.IdGenerator; +import weaver.hrm.User; + +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @author Harryxzy + * @ClassName VariableItemServiceImpl + * @date 2024/08/07 9:31 + * @description 浮动薪酬项目 + */ +public class VariableItemServiceImpl extends Service implements VariableItemService { + + private VariableItemMapper getVariableItemMapper(){ + return MapperProxyFactory.getProxy(VariableItemMapper.class); + } + + private SalaryFormulaService getSalaryFormulaService(User user) { + return ServiceUtil.getService(SalaryFormulaServiceImpl.class, user); + } + + private SalaryItemService getSalaryItemService(User user) { + return ServiceUtil.getService(SalaryItemServiceImpl.class, user); + } + + private VariableArchiveItemService getVariableArchiveItemService(User user) { + return ServiceUtil.getService(VariableArchiveItemServiceImpl.class, user); + } + + @Override + public VariableItemPO getById(Long id) { + if (id == null) { + return null; + } + return getVariableItemMapper().getById(id); + } + + @Override + public List listByIds(List ids) { + if (CollectionUtils.isEmpty(ids)) { + return Collections.emptyList(); + } + return getVariableItemMapper().listSome(VariableItemPO.builder().ids(ids).build()); + } + + /** + * 获取浮动薪酬项目 + * @return + */ + @Override + public List listAll() { + return getVariableItemMapper().listAll(); + } + + /** + * 获取浮动薪资项目列表(分页) + * + * @param queryParam + * @return + */ + @Override + public PageInfo listPage(VariableItemQueryParam queryParam) { + List variableItemPOS = listAll(); + if (StringUtils.isNotBlank(queryParam.getItemName())) { + variableItemPOS = variableItemPOS.stream().filter(po -> po.getName().contains(queryParam.getItemName())).collect(Collectors.toList()); + } + // 查询不可删除的code、id + SalaryItemServiceImpl.UsingItem usingItem = getSalaryItemService(user).getUsingItem(); + List usingCodes = usingItem.getUsingCodes(); + List usingVariableItemIds = getVariableArchiveItemService(user).listUsingItems(); + + List variableItemDTOList = variableItemPOS.stream() + .map(po -> VariableItemListDTO.builder() + .id(po.getId()) + .name(po.getName()) + .dataType(SalaryDataTypeEnum.parseByValue(po.getDataType()).getDefaultLabel()) + .canDelete( !(usingCodes.contains(po.getCode()) || usingVariableItemIds.contains(po.getId())) ) + .build()) + .collect(Collectors.toList()); + return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), variableItemDTOList, VariableItemListDTO.class); + } + + private List listByName(String name) { + return getVariableItemMapper().listSome(VariableItemPO.builder().name(name).build()); + } + + @Override + public Integer save(VariableItemSaveParam saveParam) { + // 名称不能和已有的自定义薪资项目重名 + List variableItemPOS = listByName(saveParam.getName()); + if (CollectionUtils.isNotEmpty(variableItemPOS)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "项目名称已存在,请重新命名")); + } + Date now = new Date(); + long id = com.engine.salary.util.db.IdGenerator.generate(); + VariableItemPO variableItemPO = VariableItemPO.builder() + .id(id) + .name(saveParam.getName()) + .code(IdGenerator.getUUID()) + .dataType(saveParam.getDataType()) + .creator(Long.valueOf(user.getUID())) + .deleteType(NumberUtils.INTEGER_ZERO) + .createTime(now) + .updateTime(now) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build(); + return getVariableItemMapper().insertIgnoreNull(variableItemPO); + + } + + @Override + public VariableItemPO update(VariableItemSaveParam saveParam) { + ValidUtil.doValidator(saveParam, RuntimeTypeEnum.UPDATE); + // 查询薪资项目,判断薪资项目是否存在 + VariableItemPO variableItemPO = getById(saveParam.getId()); + if (Objects.isNull(variableItemPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "参数错误,项目不存在或已被删除")); + } + // 名称不能和已有的自定义薪资项目重名 + List variableItemPOS = listByName(saveParam.getName()); + boolean nameExist = variableItemPOS.stream().anyMatch(e -> !Objects.equals(saveParam.getId(), e.getId())); + if (nameExist) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98326, "项目名称已存在,请重新命名")); + } + + // 更新薪资项目 + VariableItemPO newVariableItemPO = new VariableItemPO(); + BeanUtils.copyProperties(variableItemPO, newVariableItemPO); + newVariableItemPO.setName(saveParam.getName()); + newVariableItemPO.setDataType(saveParam.getDataType()); + newVariableItemPO.setUpdateTime(new Date()); + getVariableItemMapper().update(newVariableItemPO); + + //改名后更新公式 + String oldName = variableItemPO.getName(); + String newName = saveParam.getName(); + if (!StringUtils.equals(oldName, newName)) { + String itemPrefix = "variableItem_"; + String fieldNamePrefix = "{浮动薪资项目.%s}"; + changeName(variableItemPO, oldName, newName, itemPrefix, fieldNamePrefix); + } + return variableItemPO; + } + + private void changeName(VariableItemPO variableItemPO, String oldName, String newName, String itemPrefix, String fieldNamePrefix) { + String code = itemPrefix + variableItemPO.getCode(); + Date now = new Date(); + List formulaVars = getSalaryFormulaService(user).listByCode(code); + formulaVars.forEach(v -> { + FormulaVar formulaVar = FormulaVar.builder() + .id(v.getId()) + .name(newName) + .fieldName(String.format(fieldNamePrefix, newName)) + .updateTime(now) + .build(); + getSalaryFormulaService(user).updateVar(formulaVar); + }); + + List formulaIds = SalaryEntityUtil.properties(formulaVars, FormulaVar::getFormulaId, Collectors.toList()); + List formulaPOS = getSalaryFormulaService(user).listByIds(formulaIds); + formulaPOS.forEach(f -> { + String formula = f.getFormula(); + formula = formula.replace(String.format(fieldNamePrefix, oldName), String.format(fieldNamePrefix, newName)); + FormulaPO formulaPO = FormulaPO.builder() + .id(f.getId()) + .formula(formula) + .updateTime(now) + .build(); + getSalaryFormulaService(user).update(formulaPO); + }); + } + + @Override + public void deleteItems(List itemIds) { + if (CollectionUtils.isEmpty(itemIds)) { + return; + } + + SalaryItemServiceImpl.UsingItem usingItem = getSalaryItemService(user).getUsingItem(); + List usingCodes = usingItem.getUsingCodes(); + + // 查询薪资项目 + List variableItemPOS = listByIds(itemIds); + if (CollectionUtils.isEmpty(variableItemPOS)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "参数错误,浮动薪资项目不存在或已被删除")); + } + List codes = SalaryEntityUtil.properties(variableItemPOS, VariableItemPO::getCode, Collectors.toList()); + if (CollectionUtils.containsAny(usingCodes, codes)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "公式正在使用该浮动薪资项目,不允许删除")); + } + // 查询浮动薪酬档案中已使用的浮动薪资项目 + List usingVariableItemIds = getVariableArchiveItemService(user).listUsingItems(); + if (CollectionUtils.containsAny(usingVariableItemIds, itemIds)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "浮动薪资档案中正在使用该薪资项目,不允许删除")); + } + itemIds.stream().forEach(id -> getVariableItemMapper().delete(VariableItemPO.builder().id(id).build())); + ; + } + + @Override + public VariableItemListDTO getDetail(Long id) { + if (id == null) { + return null; + } + VariableItemPO variableItemPO = getVariableItemMapper().getById(id); + return VariableItemListDTO.builder() + .id(variableItemPO.getId()) + .name(variableItemPO.getName()) + .dataType(variableItemPO.getDataType()) + .build(); + } +} diff --git a/src/com/engine/salary/web/VariableArchiveController.java b/src/com/engine/salary/web/VariableArchiveController.java new file mode 100644 index 000000000..217ba9699 --- /dev/null +++ b/src/com/engine/salary/web/VariableArchiveController.java @@ -0,0 +1,276 @@ +package com.engine.salary.web; + +import com.engine.common.util.ServiceUtil; +import com.engine.salary.entity.datacollection.dto.VariableItemListDTO; +import com.engine.salary.entity.datacollection.param.VariableArchiveImportHandleParam; +import com.engine.salary.entity.datacollection.param.VariableArchiveQueryParam; +import com.engine.salary.entity.datacollection.param.VariableArchiveSaveParam; +import com.engine.salary.util.ResponseResult; +import com.engine.salary.util.SalaryDateUtil; +import com.engine.salary.wrapper.VariableArchiveWrapper; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +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.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 数据采集-浮动薪酬 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author xzy + * @version 1.0 + **/ +@Slf4j +public class VariableArchiveController { + + private VariableArchiveWrapper getVariableArchiveWrapper(User user) { + return ServiceUtil.getService(VariableArchiveWrapper.class, user); + } + + /** + * 浮动薪酬列表 + * + * @param request + * @param response + * @param queryParam + * @return + */ + @POST + @Path("/list") + @Produces(MediaType.APPLICATION_JSON) + public String list(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody VariableArchiveQueryParam queryParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getVariableArchiveWrapper(user)::list, queryParam); + } + + /** + * 浮动薪酬明细 + * + * @param request + * @param response + * @param queryParam + * @return + */ + @POST + @Path("/getDetail") + @Produces(MediaType.APPLICATION_JSON) + public String getDetail(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody VariableArchiveQueryParam queryParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getVariableArchiveWrapper(user)::getDetail, queryParam); + } + + /** + * 获取创建浮动薪酬档案时项目信息 + * + * @param request + * @param response + * @return + */ + @POST + @Path("/getCreateForm") + @Produces(MediaType.APPLICATION_JSON) + public String getCreateForm(@Context HttpServletRequest request, @Context HttpServletResponse response) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getVariableArchiveWrapper(user)::getCreateForm); + } + + /** + * 创建浮动薪酬档案 + * + * @param request + * @param response + * @param saveParam + * @return + */ + @POST + @Path("/createData") + @Produces(MediaType.APPLICATION_JSON) + public String createData(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody VariableArchiveSaveParam saveParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getVariableArchiveWrapper(user)::createData, saveParam); + } + + + @GET + @Path("/downloadTemplate") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response downloadTemplate(@Context HttpServletRequest request, @Context HttpServletResponse response) { + try { + User user = HrmUserVarify.getUser(request, response); + VariableArchiveQueryParam param = buildParam(request); + + XSSFWorkbook workbook = getVariableArchiveWrapper(user).downloadTemplate(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; + } + } + + + /** + * 导出 + * + * @param + * @return + */ + @GET + @Path("/export") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response export(@Context HttpServletRequest request, @Context HttpServletResponse response) { + try { + User user = HrmUserVarify.getUser(request, response); + VariableArchiveQueryParam param = buildParam(request); + + XSSFWorkbook workbook = getVariableArchiveWrapper(user).export(param); + + String fileName = null; + try { + fileName = URLEncoder.encode("浮动薪酬" + LocalDate.now() + ".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; + } + } + + + + private VariableArchiveQueryParam buildParam(HttpServletRequest request) { + VariableArchiveQueryParam param = new VariableArchiveQueryParam(); + + String salaryMonthStr = request.getParameter("salaryMonth"); + if (StringUtils.isNotBlank(salaryMonthStr)) { + param.setSalaryMonth(salaryMonthStr); + param.setSalaryMonthDate(SalaryDateUtil.dateStrToLocalYearMonth(salaryMonthStr)); + } + String username = request.getParameter("username"); + if (StringUtils.isNotBlank(username)) { + param.setUsername(username); + } + + String departmentIdStr = request.getParameter("departmentIds"); + if (StringUtils.isNotBlank(departmentIdStr)) { + List departmentIds = Arrays.stream(departmentIdStr.split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList()); + param.setDepartmentIds(departmentIds); + } + String workcode = request.getParameter("workcode"); + if (StringUtils.isNotBlank(workcode)) { + param.setWorkcode(workcode); + } + + String hasData = request.getParameter("hasData"); + if (StringUtils.isNotBlank(hasData)) { + param.setHasData(hasData.equals("true")); + } + return param; + } + + @POST + @Path("/preview") + @Produces(MediaType.APPLICATION_JSON) + public String preview(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody VariableArchiveImportHandleParam importParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getVariableArchiveWrapper(user)::preview, importParam); + } + + @POST + @Path("/importData") + @Produces(MediaType.APPLICATION_JSON) + public String importAddUpDeduction(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody VariableArchiveImportHandleParam importParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getVariableArchiveWrapper(user)::importData, importParam); + } + + + /** + * @description 删除 + * @return String + * @author Harryxzy + * @date 2024/08/08 14:41 + */ + @POST + @Path("/deleteSelectData") + @Produces(MediaType.APPLICATION_JSON) + public String deleteSelectVariableArchive(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody VariableArchiveQueryParam variableArchiveQueryParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult, String>(user).run(getVariableArchiveWrapper(user)::deleteSelectVariableArchive, variableArchiveQueryParam.getIds()); + } + + // /** + // * @description 获取其他免税扣除数据 + // * @return String + // * @author Harryxzy + // * @date 2022/10/31 13:42 + // */ + // @POST + // @Path("/getData") + // @Produces(MediaType.APPLICATION_JSON) + // public String getOtherDeduction(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody OtherDeductionParam otherDeductionParam) { + // User user = HrmUserVarify.getUser(request, response); + // return new ResponseResult(user).run(getOtherDeductionWrapper(user)::getOtherDeduction, otherDeductionParam); + // } + // + // /** + // * @description 删除所选其他免税扣除 + // * @return String + // * @author Harryxzy + // * @date 2022/10/27 14:41 + // */ + // @POST + // @Path("/deleteSelectData") + // @Produces(MediaType.APPLICATION_JSON) + // public String deleteSelectOtherDeduction(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AddUpDeductionRecordDeleteParam otherDeductionDeleteParam) { + // User user = HrmUserVarify.getUser(request, response); + // return new ResponseResult>(user).run(getOtherDeductionWrapper(user)::deleteSelectData, otherDeductionDeleteParam); + // } + +} diff --git a/src/com/engine/salary/web/VariableItemController.java b/src/com/engine/salary/web/VariableItemController.java new file mode 100644 index 000000000..70146a585 --- /dev/null +++ b/src/com/engine/salary/web/VariableItemController.java @@ -0,0 +1,324 @@ +package com.engine.salary.web; + +import com.engine.common.util.ServiceUtil; +import com.engine.salary.entity.datacollection.dto.VariableItemListDTO; +import com.engine.salary.entity.datacollection.param.VariableItemQueryParam; +import com.engine.salary.entity.datacollection.param.VariableItemSaveParam; +import com.engine.salary.util.ResponseResult; +import com.engine.salary.util.page.PageInfo; +import com.engine.salary.wrapper.VariableItemWrapper; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import lombok.extern.slf4j.Slf4j; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.List; + +/** + * 数据采集-浮动薪酬项目 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author xzy + * @version 1.0 + **/ +@Slf4j +public class VariableItemController { + + private VariableItemWrapper getVariableItemWrapper(User user) { + return ServiceUtil.getService(VariableItemWrapper.class, user); + } + + /** + * 浮动薪酬项目列表 + * + * @return + */ + @POST + @Path("/listPage") + @Produces(MediaType.APPLICATION_JSON) + public String listPage(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody VariableItemQueryParam queryParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getVariableItemWrapper(user)::listPage, queryParam); + } + + + /** + * 浮动薪酬项目详细信息 + * + * @return + */ + @POST + @Path("/getDetail") + @Produces(MediaType.APPLICATION_JSON) + public String getDetail(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody VariableItemQueryParam queryParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getVariableItemWrapper(user)::getDetail, queryParam.getId()); + } + + + /** + * 保存浮动薪资项目 + * + * @param request + * @param response + * @param saveParam + * @return + */ + @POST + @Path("/save") + @Produces(MediaType.APPLICATION_JSON) + public String saveVariableItem(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody VariableItemSaveParam saveParam) { + User user = HrmUserVarify.getUser(request, response); + if (saveParam.getId() == null || saveParam.getId() <= 0) { + return new ResponseResult(request, response, user).run(getVariableItemWrapper(user)::save, saveParam); + } else { + return new ResponseResult(request, response, user).run(getVariableItemWrapper(user)::update, saveParam); + } + } + + + + /** + * 删除浮动薪资项目 + * + * @param request + * @param response + * @param param + * @return + */ + @POST + @Path("/delete") + @Produces(MediaType.APPLICATION_JSON) + public String deleteItem(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody VariableItemQueryParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult, String>(request, response, user).run(getVariableItemWrapper(user)::deleteItems, param.getItemIds()); + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + // @GET + // @Path("/downloadTemplate") + // @Produces(MediaType.APPLICATION_OCTET_STREAM) + // public Response getAll(@Context HttpServletRequest request, @Context HttpServletResponse response) { + // try { + // User user = HrmUserVarify.getUser(request, response); + // OtherDeductionQueryParam param = buildParam(request); + // + // XSSFWorkbook workbook = getOtherDeductionWrapper(user).downloadTemplate(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; + // } + // } + // + // + // /** + // * 导出 + // * + // * @param + // * @return + // */ + // @GET + // @Path("/export") + // @Produces(MediaType.APPLICATION_OCTET_STREAM) + // public Response export(@Context HttpServletRequest request, @Context HttpServletResponse response) { + // try { + // User user = HrmUserVarify.getUser(request, response); + // + // OtherDeductionQueryParam param = buildParam(request); + // + // XSSFWorkbook workbook = getOtherDeductionWrapper(user).export(param); + // + // String fileName = null; + // try { + // fileName = URLEncoder.encode("其他免税扣除" + LocalDate.now() + ".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; + // } + // } + // + // + // + // + // @Nullable + // private OtherDeductionQueryParam buildParam(HttpServletRequest request) { + // OtherDeductionQueryParam param = new OtherDeductionQueryParam(); + // String ids = request.getParameter("ids"); + // if (StringUtils.isNotBlank(ids)) { + // param.setIds(Arrays.stream(ids.split(",")).map(Long::valueOf).collect(Collectors.toList())); + // } + // String keyword = request.getParameter("keyword"); + // if (StringUtils.isNotBlank(keyword)) { + // param.setKeyword(keyword); + // } + // String id = request.getParameter("id"); + // if (StringUtils.isNotBlank(id)) { + // param.setId(Long.valueOf(id)); + // } + // String declareMonth = request.getParameter("declareMonth"); + // if (StringUtils.isNotBlank(declareMonth)) { + // param.setDeclareMonth(Arrays.stream(declareMonth.split(",")).map(e -> e + "-01 00:00:00").collect(Collectors.toList())); + // param.setDeclareMonthDate(Arrays.stream(declareMonth.split(",")).map(e -> e + "-01 00:00:00").map(SalaryDateUtil::dateStrToLocalTime).collect(Collectors.toList())); + // } + // + // String username = request.getParameter("username"); + // if (StringUtils.isNotBlank(username)) { + // param.setUsername(username); + // } + // String employeeId = request.getParameter("employeeId"); + // if (StringUtils.isNotBlank(employeeId)) { + // param.setEmployeeId(Long.valueOf(employeeId)); + // } + // String taxAgentId = request.getParameter("taxAgentId"); + // if (StringUtils.isNotBlank(taxAgentId)) { + // param.setTaxAgentId(Long.valueOf(taxAgentId)); + // } + // String departmentIds = request.getParameter("departmentIds"); + // if (StringUtils.isNotBlank(departmentIds)) { + // param.setDepartmentIds(Arrays.stream(departmentIds.split(",")).map(Long::valueOf).collect(Collectors.toList())); + // } + // String jobNum = request.getParameter("jobNum"); + // if (StringUtils.isNotBlank(jobNum)) { + // param.setJobNum(jobNum); + // } + // String idNo = request.getParameter("idNo"); + // if (StringUtils.isNotBlank(idNo)) { + // param.setIdNo(idNo); + // } + // String hiredate = request.getParameter("hiredate"); + // if (StringUtils.isNotBlank(hiredate)) { + // SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + // List dates = Arrays.stream(hiredate.split(",")).map(d -> { + // try { + // return format.parse(d); + // } catch (ParseException e) { + // e.printStackTrace(); + // } + // return null; + // }).collect(Collectors.toList()); + // param.setHiredate(dates); + // } + // String mobile = request.getParameter("mobile"); + // if (StringUtils.isNotBlank(mobile)) { + // param.setMobile(mobile); + // } + // String otherTaxExemptDeductionId = request.getParameter("otherTaxExemptDeductionId"); + // if (StringUtils.isNotBlank(otherTaxExemptDeductionId)) { + // param.setOtherTaxExemptDeductionId(Long.valueOf(otherTaxExemptDeductionId)); + // } + // + // String hasData = request.getParameter("hasData"); + // if (StringUtils.isNotBlank(hasData)) { + // param.setHasData("true".equals(hasData)); + // } + // return param; + // } + // + // @POST + // @Path("/preview") + // @Produces(MediaType.APPLICATION_JSON) + // public String preview(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody OtherDeductionImportParam importParam) { + // User user = HrmUserVarify.getUser(request, response); + // return new ResponseResult>(user).run(getOtherDeductionWrapper(user)::preview, importParam); + // } + // + // @POST + // @Path("/importData") + // @Produces(MediaType.APPLICATION_JSON) + // public String importAddUpDeduction(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody OtherDeductionImportParam importParam) { + // User user = HrmUserVarify.getUser(request, response); + // return new ResponseResult>(user).run(getOtherDeductionWrapper(user)::importData, importParam); + // } + // + // /** + // * @description 获取其他免税扣除数据 + // * @return String + // * @author Harryxzy + // * @date 2022/10/31 13:42 + // */ + // @POST + // @Path("/getData") + // @Produces(MediaType.APPLICATION_JSON) + // public String getOtherDeduction(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody OtherDeductionParam otherDeductionParam) { + // User user = HrmUserVarify.getUser(request, response); + // return new ResponseResult(user).run(getOtherDeductionWrapper(user)::getOtherDeduction, otherDeductionParam); + // } + // + // /** + // * @description 删除所选其他免税扣除 + // * @return String + // * @author Harryxzy + // * @date 2022/10/27 14:41 + // */ + // @POST + // @Path("/deleteSelectData") + // @Produces(MediaType.APPLICATION_JSON) + // public String deleteSelectOtherDeduction(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AddUpDeductionRecordDeleteParam otherDeductionDeleteParam) { + // User user = HrmUserVarify.getUser(request, response); + // return new ResponseResult>(user).run(getOtherDeductionWrapper(user)::deleteSelectData, otherDeductionDeleteParam); + // } + +} diff --git a/src/com/engine/salary/wrapper/VariableArchiveWrapper.java b/src/com/engine/salary/wrapper/VariableArchiveWrapper.java new file mode 100644 index 000000000..5a3108980 --- /dev/null +++ b/src/com/engine/salary/wrapper/VariableArchiveWrapper.java @@ -0,0 +1,190 @@ +package com.engine.salary.wrapper; + +import com.cloudstore.eccom.pc.table.WeaTableColumn; +import com.cloudstore.eccom.result.WeaResultMsg; +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.component.SalaryWeaTable; +import com.engine.salary.entity.datacollection.bo.VariableArchiveBO; +import com.engine.salary.entity.datacollection.dto.VariableArchiveListDTO; +import com.engine.salary.entity.datacollection.dto.VariableItemListDTO; +import com.engine.salary.entity.datacollection.param.VariableArchiveImportHandleParam; +import com.engine.salary.entity.datacollection.param.VariableArchiveQueryParam; +import com.engine.salary.entity.datacollection.param.VariableArchiveSaveParam; +import com.engine.salary.entity.datacollection.po.VariableItemPO; +import com.engine.salary.service.VariableArchiveService; +import com.engine.salary.service.VariableItemService; +import com.engine.salary.service.impl.VariableArchiveServiceImpl; +import com.engine.salary.service.impl.VariableItemServiceImpl; +import com.engine.salary.util.page.PageInfo; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import weaver.hrm.User; + +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description: 浮动薪酬 + * @Author: xzy + * @Date: 2024/8/6 17:39 + */ +@Slf4j +public class VariableArchiveWrapper extends Service { + private VariableArchiveService getVariableArchiveService(User user) { + return ServiceUtil.getService(VariableArchiveServiceImpl.class, user); + } + + private VariableItemService getVariableItemService(User user) { + return ServiceUtil.getService(VariableItemServiceImpl.class, user); + } + + /** + * 数据采集-浮动薪酬列表(分页) + * + * @param queryParam + * @return + */ + public Map list(VariableArchiveQueryParam queryParam) { + + //薪资档案列表 + PageInfo pageInfo = getVariableArchiveService(user).listPage(queryParam); + Collection salaryArchives = pageInfo.getList(); + + // 获取所有浮动薪酬项目 + List variableItems = getVariableItemService(user).listAll(); + + //整合所有的显示列(固定列+薪资项目动态列) + List> listMaps = getVariableArchiveService(user).buildVariableArchiveData(salaryArchives); + + PageInfo> pageInfos = new PageInfo>(listMaps); + pageInfos.setTotal(pageInfo.getTotal()); + pageInfos.setPageNum(pageInfo.getPageNum()); + pageInfos.setPageSize(pageInfo.getPageSize()); + + //动态列组装 + List columns = VariableArchiveBO.buildVariableArchiveTable(variableItems); + + SalaryWeaTable table = new SalaryWeaTable(user, VariableArchiveListDTO.class); + table.setColumns(columns); + WeaResultMsg result = new WeaResultMsg(false); + result.putAll(table.makeDataResult()); + result.success(); + + Map datas = new HashMap<>(); + datas.put("pageInfo", pageInfos); + datas.put("dataKey", result.getResultMap()); + + return datas; + } + + /** + * 创建浮动薪酬档案 + * + * @param saveParam + */ + public void createData(VariableArchiveSaveParam saveParam) { + getVariableArchiveService(user).createData(saveParam); + } + + /** + * 浮动薪酬档案明细 + * + * @param queryParam + * @return + */ + public Map getDetail(VariableArchiveQueryParam queryParam) { + return getVariableArchiveService(user).getDetail(queryParam); + } + + public List getCreateForm() { + return getVariableArchiveService(user).getCreateForm(); + } + + public XSSFWorkbook downloadTemplate(VariableArchiveQueryParam param) { + return getVariableArchiveService(user).downloadTemplate(param); + } + + public Map preview(VariableArchiveImportHandleParam importParam) { + return getVariableArchiveService(user).preview(importParam); + } + + public Map importData(VariableArchiveImportHandleParam importParam) { + return getVariableArchiveService(user).importData(importParam); + } + + public XSSFWorkbook export(VariableArchiveQueryParam param) { + return getVariableArchiveService(user).export(param); + } + + public void deleteSelectVariableArchive(Collection deleteIds) { + getVariableArchiveService(user).deleteSelectVariableArchive(deleteIds); + } + + + // /** + // * 导出-其他免税扣除列表 + // * + // * @param queryParam + // * @return + // */ + // public XSSFWorkbook export(OtherDeductionQueryParam queryParam) { + // return getOtherDeductionService(user).export(queryParam); + // } + // + // /** + // * 下载导入模板 + // * + // * @param queryParam + // * @return + // */ + // public XSSFWorkbook downloadTemplate(OtherDeductionQueryParam queryParam) { + // return getOtherDeductionService(user).downloadTemplate(queryParam); + // } + // + // /** + // * 预览 + // */ + // public Map preview(OtherDeductionImportParam importParam) { + // return getOtherDeductionService(user).preview(importParam); + // } + // + // /** + // * 导入数据 + // */ + // public Map importData(OtherDeductionImportParam importParam) { + // return getOtherDeductionService(user).importData(importParam); + // } + // + // /** + // * 编辑数据 + // */ + // public void editData(OtherDeductionParam otherDeductionParam) { + // getOtherDeductionService(user).editData(otherDeductionParam); + // } + // + // + // /** + // * 新增数据 + // */ + // public void createData(OtherDeductionParam otherDeductionParam) { + // getOtherDeductionService(user).createData(otherDeductionParam); + // } + // + // /** + // * 删除所选数据 + // */ + // public void deleteSelectData(AddUpDeductionRecordDeleteParam deleteParam) { + // getOtherDeductionService(user).deleteSelectData(deleteParam); + // } + // + // + // /** + // * 获取数据 + // */ + // public OtherDeductionRecordDTO getOtherDeduction(OtherDeductionParam otherDeductionParam) { + // return getOtherDeductionService(user).getOtherDeduction(otherDeductionParam); + // } +} diff --git a/src/com/engine/salary/wrapper/VariableItemWrapper.java b/src/com/engine/salary/wrapper/VariableItemWrapper.java new file mode 100644 index 000000000..92119e90f --- /dev/null +++ b/src/com/engine/salary/wrapper/VariableItemWrapper.java @@ -0,0 +1,75 @@ +package com.engine.salary.wrapper; + + +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.entity.datacollection.dto.VariableItemListDTO; +import com.engine.salary.entity.datacollection.param.VariableItemQueryParam; +import com.engine.salary.entity.datacollection.param.VariableItemSaveParam; +import com.engine.salary.service.VariableItemService; +import com.engine.salary.service.impl.VariableItemServiceImpl; +import com.engine.salary.util.page.PageInfo; +import com.engine.salary.util.valid.ValidUtil; +import lombok.extern.slf4j.Slf4j; +import weaver.hrm.User; + +import java.util.List; + +/** + * @Description: 浮动薪酬项目 + * @Author: xzy + * @Date: 2024/8/6 17:39 + */ +@Slf4j +public class VariableItemWrapper extends Service { + private VariableItemService getVariableItemService(User user) { + return ServiceUtil.getService(VariableItemServiceImpl.class, user); + } + + /** + * 获取所有的浮动薪酬项目 + * + * @param queryParam + */ + public PageInfo listPage(VariableItemQueryParam queryParam) { + return getVariableItemService(user).listPage(queryParam); + } + + /** + * 新建浮动薪酬项目 + * + * @param saveParam + */ + public void save(VariableItemSaveParam saveParam) { + ValidUtil.doValidator(saveParam); + getVariableItemService(user).save(saveParam); + } + + /** + * 更新浮动薪酬项目 + * + * @param saveParam + */ + public void update(VariableItemSaveParam saveParam) { + ValidUtil.doValidator(saveParam); + getVariableItemService(user).update(saveParam); + } + + /** + * 删除浮动薪资项目 + * + * @param itemIds + */ + public void deleteItems(List itemIds) { + getVariableItemService(user).deleteItems(itemIds); + } + + /** + * 浮动薪酬项目详细信息 + * + * @param id + */ + public VariableItemListDTO getDetail(Long id) { + return getVariableItemService(user).getDetail(id); + } +} From 71c9bd35644676e5e548c5f5026f835f50d0a9da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 9 Aug 2024 15:53:36 +0800 Subject: [PATCH 022/124] =?UTF-8?q?xml=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/entity/config/SalaryConfig.java | 8 ++++---- .../engine/salary/wrapper/SalarySystemConfigWrapper.java | 3 +++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/entity/config/SalaryConfig.java b/src/com/engine/salary/entity/config/SalaryConfig.java index c1bba915d..b15de947d 100644 --- a/src/com/engine/salary/entity/config/SalaryConfig.java +++ b/src/com/engine/salary/entity/config/SalaryConfig.java @@ -20,14 +20,14 @@ import java.util.List; @AllArgsConstructor @XStreamAlias("SalaryConfig") public class SalaryConfig { -// //版本 + // //版本 // @XStreamAlias("version") // @XStreamAsAttribute // private String version; // -// //基本信息 -//// @XStreamImplicit -// private List modules; +//公式配置 + @XStreamAlias("FormluaConfig") + private FormluaConfig formluaConfig; //社保方案 diff --git a/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java b/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java index eb25f376b..4c42ffc38 100644 --- a/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java @@ -198,10 +198,13 @@ public class SalarySystemConfigWrapper extends Service { getSalarySysConfService(user).saveSalarySendFeedback(param); } + + public SalaryConfig downloadConfig() { SalaryConfig salaryConfig = new SalaryConfig(); + List salarySysConfPOS = getSalarySysConfService(user).listSome(SalarySysConfPO.builder().build()); FormluaConfig formluaConfig = getSalaryFormulaService(user).getConfig(); salaryConfig.setFormluaConfig(formluaConfig); From 31cd3981e2f5ef081a6b1d847ee0ac0a56a029ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 9 Aug 2024 17:30:44 +0800 Subject: [PATCH 023/124] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/config/SalaryConfig.java | 6 +-- .../service/impl/SalaryItemServiceImpl.java | 46 +++++++++---------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/com/engine/salary/entity/config/SalaryConfig.java b/src/com/engine/salary/entity/config/SalaryConfig.java index b15de947d..96e4d57df 100644 --- a/src/com/engine/salary/entity/config/SalaryConfig.java +++ b/src/com/engine/salary/entity/config/SalaryConfig.java @@ -31,9 +31,9 @@ public class SalaryConfig { //社保方案 - //公式配置 - @XStreamAlias("FormluaConfig") - private FormluaConfig formluaConfig; +// //公式配置 +// @XStreamAlias("FormluaConfig") +// private FormluaConfig formluaConfig; //薪资项目 @XStreamAlias("SalaryItemConfig") diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index 04ca27940..ba417e573 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -718,18 +718,18 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService configs.forEach(e -> { List row = new ArrayList<>(); row.add(e.getName()); - row.add(SalaryOnOffEnum.parseByValue(e.getUseDefault()).getDefaultLabel()); - row.add(SalaryOnOffEnum.parseByValue(e.getHideDefault()).getDefaultLabel()); - row.add(SalaryDataTypeEnum.parseByValue(e.getDataType()).getDefaultLabel()); - row.add(SalaryRoundingModeEnum.parseByValue(e.getRoundingMode()).getDefaultLabel()); - row.add(e.getPattern()); - row.add(SalaryValueTypeEnum.parseByValue(e.getValueType()).getDefaultLabel()); + row.add(e.getUseDefault() == null ? "否" : SalaryOnOffEnum.parseByValue(e.getUseDefault()).getDefaultLabel()); + row.add(e.getHideDefault() == null ? "否" : SalaryOnOffEnum.parseByValue(e.getHideDefault()).getDefaultLabel()); + row.add(SalaryDataTypeEnum.parseByValue(Util.null2String(e.getDataType())).getDefaultLabel()); + row.add(e.getRoundingMode() == null ? "四舍五入" : SalaryRoundingModeEnum.parseByValue(e.getRoundingMode()).getDefaultLabel()); + row.add(e.getPattern() == null ? "2" : e.getPattern()); + row.add(e.getValueType() == null ? "输入" : SalaryValueTypeEnum.parseByValue(e.getValueType()).getDefaultLabel()); row.add(e.getFormulaConfig() == null ? "" : e.getFormulaConfig().getFormula()); row.add(e.getFormulaConfig() == null ? "" : JsonUtil.parseMap(Util.null2String(e.getFormulaConfig().getExtendParam()), String.class).getOrDefault("sqlReturnKey", "")); - row.add(e.getSortedIndex()); - row.add(e.getWidth()); - row.add(e.getDefaultValue()); - row.add(e.getDescription()); + row.add(e.getSortedIndex() == null ? "" : e.getSortedIndex()); + row.add(e.getWidth() == null ? "" : e.getWidth()); + row.add(e.getDefaultValue() == null ? "" : e.getDefaultValue()); + row.add(e.getDescription()== null ? "" : e.getDescription()); rows.add(row); }); @@ -750,18 +750,18 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService configs.forEach(e -> { List row = new ArrayList<>(); row.add(e.getName()); - row.add(SalaryOnOffEnum.parseByValue(e.getUseDefault()).getDefaultLabel()); - row.add(SalaryOnOffEnum.parseByValue(e.getHideDefault()).getDefaultLabel()); - row.add(SalaryDataTypeEnum.parseByValue(e.getDataType()).getDefaultLabel()); - row.add(SalaryRoundingModeEnum.parseByValue(e.getRoundingMode()).getDefaultLabel()); - row.add(e.getPattern()); - row.add(SalaryValueTypeEnum.parseByValue(e.getValueType()).getDefaultLabel()); + row.add(e.getUseDefault() == null ? "否" : SalaryOnOffEnum.parseByValue(e.getUseDefault()).getDefaultLabel()); + row.add(e.getHideDefault() == null ? "否" : SalaryOnOffEnum.parseByValue(e.getHideDefault()).getDefaultLabel()); + row.add(SalaryDataTypeEnum.parseByValue(Util.null2String(e.getDataType())).getDefaultLabel()); + row.add(e.getRoundingMode() == null ? "四舍五入" : SalaryRoundingModeEnum.parseByValue(e.getRoundingMode()).getDefaultLabel()); + row.add(e.getPattern() == null ? "2" : e.getPattern()); + row.add(e.getValueType() == null ? "输入" : SalaryValueTypeEnum.parseByValue(e.getValueType()).getDefaultLabel()); row.add(e.getFormulaConfig() == null ? "" : e.getFormulaConfig().getFormula()); row.add(e.getFormulaConfig() == null ? "" : JsonUtil.parseMap(Util.null2String(e.getFormulaConfig().getExtendParam()), String.class).getOrDefault("sqlReturnKey", "")); - row.add(e.getSortedIndex()); - row.add(e.getWidth()); - row.add(e.getDefaultValue()); - row.add(e.getDescription()); + row.add(e.getSortedIndex() == null ? "" : e.getSortedIndex()); + row.add(e.getWidth() == null ? "" : e.getWidth()); + row.add(e.getDefaultValue() == null ? "" : e.getDefaultValue()); + row.add(e.getDescription()== null ? "" : e.getDescription()); rows.add(row); }); } @@ -787,11 +787,11 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService //todo 异常提示 if (ids.contains(itemPO.getId())) { - }else if(names.contains(itemPO.getName())){ + } else if (names.contains(itemPO.getName())) { - }else if(codes.contains(itemPO.getCode())){ + } else if (codes.contains(itemPO.getCode())) { - }else { + } else { getSalaryItemMapper().insertIgnoreNull(itemPO); } }); From b83d45efa0d790c908aca099af83923696e03a92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 12 Aug 2024 10:02:46 +0800 Subject: [PATCH 024/124] =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/wiki/删除档案.txt | 3 +++ .../salary/entity/config/SalaryConfig.java | 12 +++++----- .../po/InsuranceArchivesBaseInfoPO.java | 2 ++ .../engine/salary/sys/config/SysConfig.java | 23 +++++++++++++++++++ .../salary/sys/entity/po/SalarySysConfPO.java | 23 +++++++++++++++++++ .../sys/service/SalarySysConfService.java | 4 ++++ .../impl/SalarySysConfServiceImpl.java | 14 +++++++++++ .../wrapper/SalarySystemConfigWrapper.java | 5 ++-- 8 files changed, 78 insertions(+), 8 deletions(-) create mode 100644 src/com/engine/salary/sys/config/SysConfig.java diff --git a/resource/wiki/删除档案.txt b/resource/wiki/删除档案.txt index 2ac8d7d2c..a3a0c6dbd 100644 --- a/resource/wiki/删除档案.txt +++ b/resource/wiki/删除档案.txt @@ -20,6 +20,9 @@ update hrsa_salary_archive set delete_type=3 where tax_agent_id=扣缴义务人 二、删除停薪员工档案 update hrsa_salary_archive set delete_type=3 where run_status in ('STOP_FROM_PENDING','STOP_FROM_SUSPEND') +二、删除停薪员工社保档案 +update hrsa_insurance_base_info set delete_type=3 where run_status in ('4','5') + 三、删除指定人员档案 diff --git a/src/com/engine/salary/entity/config/SalaryConfig.java b/src/com/engine/salary/entity/config/SalaryConfig.java index 96e4d57df..1a71f68ef 100644 --- a/src/com/engine/salary/entity/config/SalaryConfig.java +++ b/src/com/engine/salary/entity/config/SalaryConfig.java @@ -5,6 +5,7 @@ import com.engine.salary.entity.salaryformula.config.FormluaConfig; import com.engine.salary.entity.salaryitem.config.SalaryItemAllConfig; import com.engine.salary.entity.taxagent.config.TaxAgentConfig; import com.engine.salary.entity.taxagent.po.TaxAgentBasePO; +import com.engine.salary.sys.config.SysConfig; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamImplicit; import lombok.AllArgsConstructor; @@ -25,15 +26,14 @@ public class SalaryConfig { // @XStreamAsAttribute // private String version; // -//公式配置 - @XStreamAlias("FormluaConfig") - private FormluaConfig formluaConfig; + @XStreamAlias("SysConfig") + private SysConfig sysConfig; //社保方案 -// //公式配置 -// @XStreamAlias("FormluaConfig") -// private FormluaConfig formluaConfig; + //公式配置 + @XStreamAlias("FormluaConfig") + private FormluaConfig formluaConfig; //薪资项目 @XStreamAlias("SalaryItemConfig") diff --git a/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesBaseInfoPO.java b/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesBaseInfoPO.java index 0a5dd7b01..7de87c044 100644 --- a/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesBaseInfoPO.java +++ b/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesBaseInfoPO.java @@ -2,6 +2,7 @@ package com.engine.salary.entity.siarchives.po; import com.engine.hrmelog.annotation.ElogTransform; import com.engine.salary.enums.datacollection.DataCollectionEmployeeTypeEnum; +import com.engine.salary.enums.siaccount.EmployeeStatusEnum; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -90,6 +91,7 @@ public class InsuranceArchivesBaseInfoPO { /** * 福利执行状态 + * @see EmployeeStatusEnum */ @ElogTransform(name = "福利执行状态") private String runStatus; diff --git a/src/com/engine/salary/sys/config/SysConfig.java b/src/com/engine/salary/sys/config/SysConfig.java new file mode 100644 index 000000000..3da7f8818 --- /dev/null +++ b/src/com/engine/salary/sys/config/SysConfig.java @@ -0,0 +1,23 @@ +package com.engine.salary.sys.config; + +import com.engine.salary.sys.entity.po.SalarySysConfPO; +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamImplicit; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@XStreamAlias("SysConfig") +public class SysConfig { + + @XStreamImplicit + private List salarySysConfs; + +} diff --git a/src/com/engine/salary/sys/entity/po/SalarySysConfPO.java b/src/com/engine/salary/sys/entity/po/SalarySysConfPO.java index 6a2d231ec..bc75d7a95 100644 --- a/src/com/engine/salary/sys/entity/po/SalarySysConfPO.java +++ b/src/com/engine/salary/sys/entity/po/SalarySysConfPO.java @@ -4,6 +4,9 @@ package com.engine.salary.sys.entity.po; import com.engine.salary.annotation.TableTitle; import com.engine.salary.util.valid.DataCheck; import com.engine.salary.util.valid.RuntimeTypeEnum; +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; +import com.thoughtworks.xstream.annotations.XStreamOmitField; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -15,54 +18,74 @@ import java.util.Date; @Builder @NoArgsConstructor @AllArgsConstructor +@XStreamAlias("SalarySysConf") public class SalarySysConfPO { @DataCheck(require = true, runtime = RuntimeTypeEnum.UPDATE, message = "id为空") + @XStreamOmitField private Long id; /** * 标识 */ @TableTitle(title = "标识", dataIndex = "confKey", key = "confKey") @DataCheck(require = true, message = "标识为空") + @XStreamAlias("confKey") + @XStreamAsAttribute private String confKey; /** * 值 */ @TableTitle(title = "值", dataIndex = "confValue", key = "confValue") @DataCheck(require = true, message = "标识为空") + @XStreamAlias("confValue") + @XStreamAsAttribute private String confValue; /** * 标题 */ @TableTitle(title = "标题", dataIndex = "title", key = "title") @DataCheck(require = true, message = "标题为空") + @XStreamAlias("title") + @XStreamAsAttribute private String title; /** * 所属模块 */ @TableTitle(title = "所属模块", dataIndex = "module", key = "module") + @XStreamAlias("module") + @XStreamAsAttribute private String module; /** * 排序权重 */ @TableTitle(title = "排序权重", dataIndex = "orderWeight", key = "orderWeight") + @XStreamAlias("orderWeight") + @XStreamAsAttribute private Integer orderWeight; /** * 描述 */ @TableTitle(title = "描述", dataIndex = "description", key = "description") + @XStreamAlias("description") + @XStreamAsAttribute private String description; /** * 是否已删除,0否,1是 */ + @XStreamAlias("deleteType") + @XStreamAsAttribute private Integer deleteType; /** * 创建时间 */ + @XStreamAlias("createTime") + @XStreamAsAttribute private Date createTime; /** * 修改时间 */ + @XStreamAlias("updateTime") + @XStreamAsAttribute private Date updateTime; } \ No newline at end of file diff --git a/src/com/engine/salary/sys/service/SalarySysConfService.java b/src/com/engine/salary/sys/service/SalarySysConfService.java index 345c2187a..aca487ab1 100644 --- a/src/com/engine/salary/sys/service/SalarySysConfService.java +++ b/src/com/engine/salary/sys/service/SalarySysConfService.java @@ -1,5 +1,6 @@ package com.engine.salary.sys.service; +import com.engine.salary.sys.config.SysConfig; import com.engine.salary.sys.entity.param.AppSettingSaveParam; import com.engine.salary.sys.entity.param.OrderRuleParam; import com.engine.salary.sys.entity.po.SalarySysConfPO; @@ -137,4 +138,7 @@ public interface SalarySysConfService { * @param app */ void saveSettingByType(String confValue, String confKey, String title, String app); + + SysConfig getConfig(); + void parseConfig(SysConfig config); } diff --git a/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java b/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java index 24050fafc..497a2f4be 100644 --- a/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java +++ b/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java @@ -38,6 +38,7 @@ import com.engine.salary.mapper.siarchives.SocialSchemeMapper; import com.engine.salary.mapper.sischeme.InsuranceSchemeDetailMapper; import com.engine.salary.mapper.sys.SalarySysConfMapper; import com.engine.salary.mapper.taxdeclaration.TaxDeclarationDetailMapper; +import com.engine.salary.sys.config.SysConfig; import com.engine.salary.sys.constant.SalarySysConstant; import com.engine.salary.sys.entity.param.AppSettingSaveParam; import com.engine.salary.sys.entity.param.OrderRuleParam; @@ -509,6 +510,19 @@ public class SalarySysConfServiceImpl extends Service implements SalarySysConfSe } } + @Override + public SysConfig getConfig() { + SysConfig sysConfig = new SysConfig(); + List salarySysConfPOS = getSalarySysConfMapper().listAll(); + sysConfig.setSalarySysConfs(salarySysConfPOS); + return sysConfig; + } + + @Override + public void parseConfig(SysConfig config) { + + } + /** * 开启/关闭加解密 * @param confValue diff --git a/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java b/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java index 4c42ffc38..5b424bd69 100644 --- a/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java @@ -10,6 +10,7 @@ import com.engine.salary.entity.taxagent.config.TaxAgentConfig; import com.engine.salary.entity.taxagent.po.TaxAgentBasePO; import com.engine.salary.service.*; import com.engine.salary.service.impl.*; +import com.engine.salary.sys.config.SysConfig; import com.engine.salary.sys.entity.param.*; import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.sys.entity.vo.AppSettingVO; @@ -203,8 +204,8 @@ public class SalarySystemConfigWrapper extends Service { public SalaryConfig downloadConfig() { SalaryConfig salaryConfig = new SalaryConfig(); - - List salarySysConfPOS = getSalarySysConfService(user).listSome(SalarySysConfPO.builder().build()); + SysConfig sysConfig = getSalarySysConfService(user).getConfig(); + salaryConfig.setSysConfig(sysConfig); FormluaConfig formluaConfig = getSalaryFormulaService(user).getConfig(); salaryConfig.setFormluaConfig(formluaConfig); From ecb0f6f7bcffa13dc5ab23cfb7e725664cd69ee2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 12 Aug 2024 15:16:06 +0800 Subject: [PATCH 025/124] =?UTF-8?q?excel=E5=AF=BC=E5=85=A5=E5=B7=A5?= =?UTF-8?q?=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/SalaryItemExcelConfig.java | 2 +- .../enums/salaryitem/SalaryDataTypeEnum.java | 10 + .../mapper/salaryitem/SalaryItemMapper.java | 6 +- .../mapper/salaryitem/SalaryItemMapper.xml | 183 ++++-------------- .../salary/service/SalaryItemService.java | 5 +- .../service/impl/SalaryItemServiceImpl.java | 53 ++--- 6 files changed, 82 insertions(+), 177 deletions(-) diff --git a/src/com/engine/salary/entity/salaryitem/config/SalaryItemExcelConfig.java b/src/com/engine/salary/entity/salaryitem/config/SalaryItemExcelConfig.java index d567f2d86..ab04abfae 100644 --- a/src/com/engine/salary/entity/salaryitem/config/SalaryItemExcelConfig.java +++ b/src/com/engine/salary/entity/salaryitem/config/SalaryItemExcelConfig.java @@ -81,7 +81,7 @@ public class SalaryItemExcelConfig { @ExcelHead(title="sql返回字段",dataIndex = "sqlReturnKey") @ExcelProperty(index = 8) - private String sqlReturnKey; + private String extendParam; /** * 排序 diff --git a/src/com/engine/salary/enums/salaryitem/SalaryDataTypeEnum.java b/src/com/engine/salary/enums/salaryitem/SalaryDataTypeEnum.java index b5b1a483b..fa5c76f40 100644 --- a/src/com/engine/salary/enums/salaryitem/SalaryDataTypeEnum.java +++ b/src/com/engine/salary/enums/salaryitem/SalaryDataTypeEnum.java @@ -1,6 +1,7 @@ package com.engine.salary.enums.salaryitem; import com.engine.salary.enums.BaseEnum; +import com.engine.salary.enums.SalaryValueTypeEnum; import java.util.Arrays; import java.util.Objects; @@ -66,4 +67,13 @@ public enum SalaryDataTypeEnum implements BaseEnum { } return ""; } + + public static SalaryDataTypeEnum parseByDefaultLabel(String defaultLabel) { + for (SalaryDataTypeEnum typeEnum : SalaryDataTypeEnum.values()) { + if (Objects.equals(typeEnum.getDefaultLabel(), defaultLabel)) { + return typeEnum; + } + } + return STRING; + } } diff --git a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java index 1d53a8f3c..fad7541ab 100644 --- a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java +++ b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.java @@ -1,6 +1,6 @@ package com.engine.salary.mapper.salaryitem; -import com.engine.salary.entity.salaryitem.config.SalaryItemConfig; +import com.engine.salary.entity.salaryitem.config.SalaryItemExcelConfig; import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import org.apache.ibatis.annotations.Param; @@ -70,9 +70,7 @@ public interface SalaryItemMapper { SalaryItemPO getByName(String name); - List getConfig(@Param("ids") Collection ids); - - List getAllConfig(@Param("ids") Collection ids); + List getConfig(@Param("ids") Collection ids); diff --git a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml index 30f1a6bbd..e099ec2b3 100644 --- a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml +++ b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml @@ -31,7 +31,10 @@ - t.id, + t + . + id + , t.name, t.code, t.system_type, @@ -589,138 +592,49 @@ WHERE name = #{name} AND delete_type = 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - item.id as item_id - ,item.name as item_name - , item.code as item_code - , item.system_type as item_system_type - , item.sys_salary_item_id as item_sys_salary_item_id - , item.use_default as item_use_default - , item.use_in_employee_salary as item_use_in_employee_salary - , item.rounding_mode as item_rounding_mode - , item.pattern as item_pattern - , item.value_type as item_value_type - , item.formula_id as item_formula_id - , item.description as item_description - , item.can_edit as item_can_edit - , item.can_delete as item_can_delete - , item.data_type as item_data_type - , item.shared_type as item_shared_type - , item.tax_agent_ids as item_tax_agent_ids - , item.sorted_index as item_sorted_index - , item.hide_default as item_hide_default - , item.width as item_width - , item.default_value as item_default_value - , f.formula_id - , f.formula_name - , f.formula_description - , f.formula_module - , f.formula_use_for - , f.formula_reference_type - , f.formula_return_type - , f.formula_validate_type - , f.formula_extend_param - , f.formula_formula - , f.formula_formulaRunScript - , f.var_id - , f.var_name - , f.var_formula_id - , f.var_field_id - , f.var_field_name - , f.var_field_type - , f.var_source - , f.var_order_index + item.name as name + , item.use_default as use_default + , item.hide_default as hide_default + , item.data_type as data_type + , item.rounding_mode as rounding_mode + , item.pattern as pattern + , item.value_type as value_type + , f.formula as formula + , f.extend_param as extend_param + , item.sorted_index as sorted_index + , item.width as width + , item.default_value as default_value + , item.description as description - - formula.id as formula_id - , formula.name as formula_name - , formula.description as formula_description - , formula.module as formula_module - , formula.use_for as formula_use_for - , formula.reference_type as formula_reference_type - , formula.return_type as formula_return_type - , formula.validate_type as formula_validate_type - , formula.extend_param as formula_extend_param - , formula.formula as formula_formula - , formula.formulaRunScript as formula_formulaRunScript - - - - , var.id as var_id - , var.name as var_name - , var.formula_id as var_formula_id - , var.field_id as var_field_id - , var.field_name as var_field_name - , var.field_type as var_field_type - , var.source as var_source - , var.order_index as var_order_index - - - - - \ No newline at end of file diff --git a/src/com/engine/salary/service/SalaryItemService.java b/src/com/engine/salary/service/SalaryItemService.java index e10090439..f9a760dcb 100644 --- a/src/com/engine/salary/service/SalaryItemService.java +++ b/src/com/engine/salary/service/SalaryItemService.java @@ -1,7 +1,7 @@ package com.engine.salary.service; import com.engine.salary.entity.salaryitem.config.SalaryItemAllConfig; -import com.engine.salary.entity.salaryitem.config.SalaryItemConfig; +import com.engine.salary.entity.salaryitem.config.SalaryItemExcelConfig; import com.engine.salary.entity.salaryitem.param.*; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.enums.SalarySystemTypeEnum; @@ -155,9 +155,8 @@ public interface SalaryItemService { SalaryItemAllConfig getConfig(); void parseConfig(SalaryItemAllConfig salaryItemConfig); - List getConfig(SalaryItemExportParam param); + List getConfig(SalaryItemExportParam param); - List getAllConfig(SalaryItemExportParam param); Map preview(SalaryItemImportParam param); diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index ba417e573..07126915c 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -15,7 +15,6 @@ import com.engine.salary.entity.salaryformula.po.FormulaPO; import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.entity.salaryitem.bo.SalaryItemBO; import com.engine.salary.entity.salaryitem.config.SalaryItemAllConfig; -import com.engine.salary.entity.salaryitem.config.SalaryItemConfig; import com.engine.salary.entity.salaryitem.config.SalaryItemExcelConfig; import com.engine.salary.entity.salaryitem.param.*; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; @@ -538,14 +537,10 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService @Override - public List getConfig(SalaryItemExportParam param) { + public List getConfig(SalaryItemExportParam param) { return getSalaryItemMapper().getConfig(param.getIds()); } - @Override - public List getAllConfig(SalaryItemExportParam param) { - return getSalaryItemMapper().getAllConfig(param.getIds()); - } @Override public Map preview(SalaryItemImportParam param) { @@ -585,7 +580,7 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService SalaryItemExcelConfig config = configs.get(i); String name = config.getName(); SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByDefaultLabel(config.getValueType()); - SalaryDataTypeEnum salaryDataTypeEnum = SalaryDataTypeEnum.parseByValue(config.getDataType()); + SalaryDataTypeEnum salaryDataTypeEnum = SalaryDataTypeEnum.parseByDefaultLabel(config.getDataType()); SalaryItemPO itemPO = getByName(name); if (itemPO == null) { @@ -656,7 +651,7 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService if (salaryValueTypeEnum == SalaryValueTypeEnum.FORMULA || salaryValueTypeEnum == SalaryValueTypeEnum.SQL) { Long id = itemPO.getId(); String formula = config.getFormula(); - String sqlReturnKey = config.getSqlReturnKey(); + String sqlReturnKey = config.getExtendParam(); Map map = new HashMap<>(); map.put("rowIndex", rowIndex); map.put("formula", formula); @@ -711,21 +706,28 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService List dataIndexList = Lists.newArrayList(); ExcelUtil.parseHeader(SalaryItemExcelConfig.class, titles, dataIndexList); - List configs = getConfig(param); + List configs = getConfig(param); List> rows = new ArrayList<>(); rows.add(titles); configs.forEach(e -> { List row = new ArrayList<>(); row.add(e.getName()); - row.add(e.getUseDefault() == null ? "否" : SalaryOnOffEnum.parseByValue(e.getUseDefault()).getDefaultLabel()); - row.add(e.getHideDefault() == null ? "否" : SalaryOnOffEnum.parseByValue(e.getHideDefault()).getDefaultLabel()); + row.add(e.getUseDefault() == null ? "否" : SalaryOnOffEnum.parseByValue(Integer.parseInt(e.getUseDefault())).getDefaultLabel()); + row.add(e.getHideDefault() == null ? "否" : SalaryOnOffEnum.parseByValue(Integer.parseInt(e.getHideDefault())).getDefaultLabel()); row.add(SalaryDataTypeEnum.parseByValue(Util.null2String(e.getDataType())).getDefaultLabel()); - row.add(e.getRoundingMode() == null ? "四舍五入" : SalaryRoundingModeEnum.parseByValue(e.getRoundingMode()).getDefaultLabel()); + row.add(e.getRoundingMode() == null ? "四舍五入" : SalaryRoundingModeEnum.parseByValue(Integer.parseInt(e.getRoundingMode())).getDefaultLabel()); row.add(e.getPattern() == null ? "2" : e.getPattern()); - row.add(e.getValueType() == null ? "输入" : SalaryValueTypeEnum.parseByValue(e.getValueType()).getDefaultLabel()); - row.add(e.getFormulaConfig() == null ? "" : e.getFormulaConfig().getFormula()); - row.add(e.getFormulaConfig() == null ? "" : JsonUtil.parseMap(Util.null2String(e.getFormulaConfig().getExtendParam()), String.class).getOrDefault("sqlReturnKey", "")); + row.add(e.getValueType() == null ? "输入" : SalaryValueTypeEnum.parseByValue(Integer.parseInt(e.getValueType())).getDefaultLabel()); + row.add(e.getFormula() == null ? "" : e.getFormula()); + String sqlReturnKey = ""; + if(e.getExtendParam() != null){ + sqlReturnKey = JsonUtil.parseMap(Util.null2String(e.getExtendParam()), String.class).getOrDefault("sqlReturnKey", ""); + if("null".equals(sqlReturnKey)){ + sqlReturnKey = ""; + } + } + row.add(sqlReturnKey); row.add(e.getSortedIndex() == null ? "" : e.getSortedIndex()); row.add(e.getWidth() == null ? "" : e.getWidth()); row.add(e.getDefaultValue() == null ? "" : e.getDefaultValue()); @@ -746,18 +748,25 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService List> rows = new ArrayList<>(); rows.add(titles); if (param.isHasData()) { - List configs = getConfig(SalaryItemExportParam.builder().build()); + List configs = getConfig(SalaryItemExportParam.builder().build()); configs.forEach(e -> { List row = new ArrayList<>(); row.add(e.getName()); - row.add(e.getUseDefault() == null ? "否" : SalaryOnOffEnum.parseByValue(e.getUseDefault()).getDefaultLabel()); - row.add(e.getHideDefault() == null ? "否" : SalaryOnOffEnum.parseByValue(e.getHideDefault()).getDefaultLabel()); + row.add(e.getUseDefault() == null ? "否" : SalaryOnOffEnum.parseByValue(Integer.parseInt(e.getUseDefault())).getDefaultLabel()); + row.add(e.getHideDefault() == null ? "否" : SalaryOnOffEnum.parseByValue(Integer.parseInt(e.getHideDefault())).getDefaultLabel()); row.add(SalaryDataTypeEnum.parseByValue(Util.null2String(e.getDataType())).getDefaultLabel()); - row.add(e.getRoundingMode() == null ? "四舍五入" : SalaryRoundingModeEnum.parseByValue(e.getRoundingMode()).getDefaultLabel()); + row.add(e.getRoundingMode() == null ? "四舍五入" : SalaryRoundingModeEnum.parseByValue(Integer.parseInt(e.getRoundingMode())).getDefaultLabel()); row.add(e.getPattern() == null ? "2" : e.getPattern()); - row.add(e.getValueType() == null ? "输入" : SalaryValueTypeEnum.parseByValue(e.getValueType()).getDefaultLabel()); - row.add(e.getFormulaConfig() == null ? "" : e.getFormulaConfig().getFormula()); - row.add(e.getFormulaConfig() == null ? "" : JsonUtil.parseMap(Util.null2String(e.getFormulaConfig().getExtendParam()), String.class).getOrDefault("sqlReturnKey", "")); + row.add(e.getValueType() == null ? "输入" : SalaryValueTypeEnum.parseByValue(Integer.parseInt(e.getValueType())).getDefaultLabel()); + row.add(e.getFormula() == null ? "" : e.getFormula()); + String sqlReturnKey = ""; + if(e.getExtendParam() != null){ + sqlReturnKey = JsonUtil.parseMap(Util.null2String(e.getExtendParam()), String.class).getOrDefault("sqlReturnKey", ""); + if("null".equals(sqlReturnKey)){ + sqlReturnKey = ""; + } + } + row.add(sqlReturnKey); row.add(e.getSortedIndex() == null ? "" : e.getSortedIndex()); row.add(e.getWidth() == null ? "" : e.getWidth()); row.add(e.getDefaultValue() == null ? "" : e.getDefaultValue()); From 5055a4801a598982fa455dafbf501fc3aed7b422 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 12 Aug 2024 16:36:27 +0800 Subject: [PATCH 026/124] =?UTF-8?q?=E6=B5=AE=E5=8A=A8=E8=96=AA=E9=85=AC?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B9=89=E5=8A=A1=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datacollection/bo/VariableArchiveBO.java | 1 + .../bo/VariableArchiveExcelBO.java | 28 ++++++++-- .../dto/VariableArchiveListDTO.java | 12 +++++ .../VariableArchiveImportHandleParam.java | 8 ++- .../param/VariableArchiveQueryParam.java | 3 ++ .../param/VariableArchiveSaveParam.java | 3 ++ .../datacollection/po/VariableArchivePO.java | 2 + .../salaryacct/bo/CalculateFormulaVarBO.java | 20 +++---- .../datacollection/VariableArchiveMapper.xml | 52 +++++++++++++++++-- .../service/VariableArchiveService.java | 2 +- .../impl/SalaryAcctCalculateServiceImpl.java | 5 +- .../impl/VariableArchiveServiceImpl.java | 39 +++++++++++--- 12 files changed, 141 insertions(+), 34 deletions(-) diff --git a/src/com/engine/salary/entity/datacollection/bo/VariableArchiveBO.java b/src/com/engine/salary/entity/datacollection/bo/VariableArchiveBO.java index 92f09ec15..b4f2778d7 100644 --- a/src/com/engine/salary/entity/datacollection/bo/VariableArchiveBO.java +++ b/src/com/engine/salary/entity/datacollection/bo/VariableArchiveBO.java @@ -37,6 +37,7 @@ public class VariableArchiveBO { WeaTableColumn employeeIdColumn = new WeaTableColumn("100px", "人员信息表的主键id", "employeeId"); employeeIdColumn.setDisplay(WeaBoolAttr.FALSE); columns.add(employeeIdColumn); + columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(85429, "个税扣缴义务人"), "taxAgentName")); columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(85429, "姓名"), "username")); columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86185, "部门"), "departmentName")); columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86186, "手机号"), "mobile")); diff --git a/src/com/engine/salary/entity/datacollection/bo/VariableArchiveExcelBO.java b/src/com/engine/salary/entity/datacollection/bo/VariableArchiveExcelBO.java index 2644c4236..313ddc1d4 100644 --- a/src/com/engine/salary/entity/datacollection/bo/VariableArchiveExcelBO.java +++ b/src/com/engine/salary/entity/datacollection/bo/VariableArchiveExcelBO.java @@ -8,6 +8,7 @@ import com.engine.salary.entity.datacollection.param.VariableArchiveImportHandle import com.engine.salary.entity.datacollection.po.VariableArchiveItemPO; import com.engine.salary.entity.datacollection.po.VariableArchivePO; import com.engine.salary.entity.datacollection.po.VariableItemPO; +import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeEmployeeDTO; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveFieldTypeEnum; import com.engine.salary.util.SalaryI18nUtil; @@ -174,20 +175,35 @@ public class VariableArchiveExcelBO extends Service { return isError; } + // 个税扣缴义务人 + String taxAgentCellVal = Optional.ofNullable(map.get(taxAgentI18n)).orElse("").toString(); + map.put("taxAgent", taxAgentCellVal); + Optional optionalTaxAgent = importHandleParam.getTaxAgentList().stream().filter(m -> m.getTaxAgentName().equals(taxAgentCellVal)).findFirst(); + if (!optionalTaxAgent.isPresent()) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", rowindex + "个税扣缴义务人不存在,或不在权限范围内"); + excelComments.add(errorMessageMap); + isError = true; + return isError; + } + Long taxAgentId = optionalTaxAgent.get().getTaxAgentId(); + map.put("taxAgentId", taxAgentId); + // 用于初始化导入数据校验 map.put("employeeId", employeeId); - if (allTodoVariableArchives.contains(employeeId.toString())) { + String repeatKey = optionalTaxAgent.get().getTaxAgentId() + "-" + employeeId.toString(); + if (allTodoVariableArchives.contains(repeatKey)) { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowindex + "存在重复数据"); excelComments.add(errorMessageMap); isError = true; return isError; } else { - allTodoVariableArchives.add(employeeId.toString()); + allTodoVariableArchives.add(repeatKey); } // 构建薪资档案 - VariableArchivePO finalVariableArchive = buildVariableArchive(employeeId, importHandleParam); + VariableArchivePO finalVariableArchive = buildVariableArchive(employeeId, taxAgentId, importHandleParam); map.put("variableArchiveId", finalVariableArchive.getId()); List needDelArchiveItemIds = new ArrayList<>(); for (int j = 0; j < headers.size(); j++) { @@ -267,16 +283,18 @@ public class VariableArchiveExcelBO extends Service { * 构建浮动薪资档案对象 * * @param employeeId + * @param taxAgentId * @param importHandleParam * @return */ - public static VariableArchivePO buildVariableArchive(Long employeeId, VariableArchiveImportHandleParam importHandleParam) { - VariableArchivePO variableArchivePO = importHandleParam.getVariableArchivesMap().get(employeeId); + public static VariableArchivePO buildVariableArchive(Long employeeId, Long taxAgentId, VariableArchiveImportHandleParam importHandleParam) { + VariableArchivePO variableArchivePO = importHandleParam.getVariableArchivesMap().get(taxAgentId + "-" + employeeId); if (variableArchivePO == null) { // 新增浮动档案 variableArchivePO = VariableArchivePO.builder() .id(IdGenerator.generate()) .employeeId(employeeId) + .taxAgentId(taxAgentId) .salaryMonth(importHandleParam.getSalaryMonthDate()) .createTime(importHandleParam.getNowTime()) .updateTime(importHandleParam.getNowTime()) diff --git a/src/com/engine/salary/entity/datacollection/dto/VariableArchiveListDTO.java b/src/com/engine/salary/entity/datacollection/dto/VariableArchiveListDTO.java index 7851c3cb2..de5c0fd22 100644 --- a/src/com/engine/salary/entity/datacollection/dto/VariableArchiveListDTO.java +++ b/src/com/engine/salary/entity/datacollection/dto/VariableArchiveListDTO.java @@ -34,6 +34,18 @@ public class VariableArchiveListDTO { private Date salaryMonth; + /** + * 个税扣缴义务人 + */ + @TableTitle(title = "个税扣缴义务人", dataIndex = "taxAgentName", key = "taxAgentName") + @I18n + private String taxAgentName; + + /** + * 个税扣缴义务人id + */ + private String taxAgentId; + /** * 姓名 */ diff --git a/src/com/engine/salary/entity/datacollection/param/VariableArchiveImportHandleParam.java b/src/com/engine/salary/entity/datacollection/param/VariableArchiveImportHandleParam.java index 4b3622869..ab12ad1a0 100644 --- a/src/com/engine/salary/entity/datacollection/param/VariableArchiveImportHandleParam.java +++ b/src/com/engine/salary/entity/datacollection/param/VariableArchiveImportHandleParam.java @@ -4,6 +4,7 @@ import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.datacollection.po.VariableArchiveItemPO; import com.engine.salary.entity.datacollection.po.VariableArchivePO; import com.engine.salary.entity.datacollection.po.VariableItemPO; +import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeEmployeeDTO; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -59,7 +60,7 @@ public class VariableArchiveImportHandleParam { /** * 查询已有的浮动薪资档案基本数据 */ - Map variableArchivesMap; + Map variableArchivesMap; /** * 浮动薪资项目id @@ -71,6 +72,11 @@ public class VariableArchiveImportHandleParam { */ Map> effectiveItemListMap; + /** + * 获取所有个税扣缴义务人 + */ + Collection taxAgentList; + /** * 当前时间 */ diff --git a/src/com/engine/salary/entity/datacollection/param/VariableArchiveQueryParam.java b/src/com/engine/salary/entity/datacollection/param/VariableArchiveQueryParam.java index e7296d645..76066cea8 100644 --- a/src/com/engine/salary/entity/datacollection/param/VariableArchiveQueryParam.java +++ b/src/com/engine/salary/entity/datacollection/param/VariableArchiveQueryParam.java @@ -25,6 +25,9 @@ public class VariableArchiveQueryParam extends BaseQueryParam { // 主键id private Long id; + // 个税扣缴义务人 + private List taxAgentIds; + // 薪资年月 @DataCheck(require = true,message = "薪资所属月不能为空") private String salaryMonth; diff --git a/src/com/engine/salary/entity/datacollection/param/VariableArchiveSaveParam.java b/src/com/engine/salary/entity/datacollection/param/VariableArchiveSaveParam.java index e94448ffd..60e82cf91 100644 --- a/src/com/engine/salary/entity/datacollection/param/VariableArchiveSaveParam.java +++ b/src/com/engine/salary/entity/datacollection/param/VariableArchiveSaveParam.java @@ -25,6 +25,9 @@ public class VariableArchiveSaveParam { @DataCheck(require = true,message = "薪资所属月不能为空") private String salaryMonth; + @DataCheck(require = true,message = "义务人id不能为空") + private Long taxAgentIds; + private Date salaryMonthDate; // 人员id diff --git a/src/com/engine/salary/entity/datacollection/po/VariableArchivePO.java b/src/com/engine/salary/entity/datacollection/po/VariableArchivePO.java index b3735be89..c078f7dbc 100644 --- a/src/com/engine/salary/entity/datacollection/po/VariableArchivePO.java +++ b/src/com/engine/salary/entity/datacollection/po/VariableArchivePO.java @@ -28,6 +28,8 @@ public class VariableArchivePO { */ private Long employeeId; + private Long taxAgentId; + /** * 薪资月份 */ diff --git a/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java b/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java index 5035085ac..b341f162d 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java @@ -253,27 +253,23 @@ public class CalculateFormulaVarBO { } private void handleVariableArchiveData(SalaryAcctCalculateBO salaryAcctCalculateBO, Map> resultMap) { - // 浮动薪资可选字段 - Map> tempMap = Maps.newHashMapWithExpectedSize(variableArchiveList.size()); - variableArchiveList.forEach(map -> { - Long key = Long.valueOf(map.get("employeeId").toString()); - List formulaVarValues = tempMap.computeIfAbsent(key, k -> Lists.newArrayList()); + Map> variableArchiveMap = SalaryEntityUtil.convert2Map(variableArchiveList, map -> map.getOrDefault("taxAgentIds", "").toString() + "-" + map.getOrDefault("employeeId", "").toString()); + // 填充到返回结果集中 + for (SalaryAcctEmployeePO salaryAcctEmployeePO : salaryAcctCalculateBO.getSalaryAcctEmployeePOS()) { + List formulaVarValues = resultMap.computeIfAbsent(salaryAcctEmployeePO.getEmployeeId() + "_" + salaryAcctEmployeePO.getTaxAgentId(), + k -> Lists.newArrayList()); + + String key = salaryAcctEmployeePO.getTaxAgentId().toString() + "-" + salaryAcctEmployeePO.getEmployeeId().toString(); + Map map = variableArchiveMap.getOrDefault(key, Collections.emptyMap()); formulaVarValues.addAll(salaryAcctCalculateBO.getVariableItems().stream().map(field -> { String fieldId = SalaryFormulaReferenceEnum.VARIABLE_ITEM.getValue() + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + field.getCode(); - String value = map.getOrDefault(field.getId() + SalaryItemConstant.VARIABLE_ITEM_DYNAMIC_SUFFIX, StringUtils.EMPTY) == null ? StringUtils.EMPTY : map.getOrDefault(field.getId() + SalaryItemConstant.VARIABLE_ITEM_DYNAMIC_SUFFIX, StringUtils.EMPTY).toString(); return new FormulaVarValue().setFieldId(fieldId).setFieldValue(value); }).collect(Collectors.toList())); - }); - // 填充到返回结果集中 - for (SalaryAcctEmployeePO salaryAcctEmployeePO : salaryAcctCalculateBO.getSalaryAcctEmployeePOS()) { - List formulaVarValues = resultMap.computeIfAbsent(salaryAcctEmployeePO.getEmployeeId() + "_" + salaryAcctEmployeePO.getTaxAgentId(), - k -> Lists.newArrayList()); - formulaVarValues.addAll(tempMap.getOrDefault(salaryAcctEmployeePO.getEmployeeId(), Collections.emptyList())); } } diff --git a/src/com/engine/salary/mapper/datacollection/VariableArchiveMapper.xml b/src/com/engine/salary/mapper/datacollection/VariableArchiveMapper.xml index ff279f29c..c6352fa2f 100644 --- a/src/com/engine/salary/mapper/datacollection/VariableArchiveMapper.xml +++ b/src/com/engine/salary/mapper/datacollection/VariableArchiveMapper.xml @@ -16,6 +16,7 @@ t.id , t.employee_id + , t.tax_agent_id , t.salary_month , t.create_time , t.update_time @@ -52,6 +53,9 @@ AND employee_id = #{employeeId} + + AND tax_agent_id = #{taxAgentId} + AND salary_month = #{salaryMonth} @@ -83,6 +87,7 @@ t.id , t.employee_id + , t.tax_agent_id , t.salary_month , t.create_time , t.update_time @@ -97,6 +102,8 @@ , e.enddate as dismissdate , d.departmentname AS departmentName , c.subcompanyname AS subcompanyName + , a.name AS taxAgentName + , a.id AS taxAgentId + + + + diff --git a/src/com/engine/salary/service/SalaryItemService.java b/src/com/engine/salary/service/SalaryItemService.java index f7c9372e2..b9206c735 100644 --- a/src/com/engine/salary/service/SalaryItemService.java +++ b/src/com/engine/salary/service/SalaryItemService.java @@ -157,6 +157,7 @@ public interface SalaryItemService { void parseConfig(SalaryItemAllConfig salaryItemConfig); Long add(SalaryItemPO salaryItemPO); + SalaryItemPO getItem(SalaryItemPO salaryItemPO); List getConfig(SalaryItemExportParam param); diff --git a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java index 403249cb6..00e886887 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java @@ -29,6 +29,7 @@ import com.engine.salary.service.*; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.SalaryLoggerUtil; +import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.excel.ExcelUtil; import com.engine.salary.util.page.PageInfo; @@ -761,12 +762,7 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi Optional.ofNullable(config .getSalaryItems()) .orElse(new ArrayList<>()) .forEach(itemPO -> { - if (idMap.containsKey(itemPO.getId())) { - itemPO.setCode(null); - itemPO.setName(null); - itemPO.setCreator(uid); - getSalaryItemMapper().updateIgnoreNull(itemPO); - } else if (nameMap.containsKey(itemPO.getName())) { + if (nameMap.containsKey(itemPO.getName())) { SalaryItemPO salaryItemPO = nameMap.get(itemPO.getName()); itemPO.setId(salaryItemPO.getId()); //不许修改code @@ -781,6 +777,7 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi itemPO.setCreator(uid); getSalaryItemMapper().updateIgnoreNull(itemPO); } else { + itemPO.setId(IdGenerator.generate()); getSalaryItemMapper().insertIgnoreNull(itemPO); } }); diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index a8c9afbe8..bdf86e28f 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -824,17 +824,22 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService } + @Override + public SalaryItemPO getItem(SalaryItemPO salaryItemPO) { + SalaryItemPO po = getByName(salaryItemPO.getName()); + if (po == null) { + po = getSalaryItemMapper().getByCode(salaryItemPO.getCode()); + } + return po; + } + + private Long add(SalaryItemPO itemPO, Map idMap, Map nameMap, Map codeMap) { long uid = user.getUID(); Long formulaId = getSalaryFormulaService(user).add(itemPO.getFormula()); itemPO.setFormulaId(formulaId); - if (idMap.containsKey(itemPO.getId())) { - itemPO.setCode(null); - itemPO.setName(null); - itemPO.setCreator(uid); - getSalaryItemMapper().updateIgnoreNull(itemPO); - } else if (nameMap.containsKey(itemPO.getName())) { + if (nameMap.containsKey(itemPO.getName())) { SalaryItemPO salaryItemPO = nameMap.get(itemPO.getName()); itemPO.setId(salaryItemPO.getId()); //不许修改code @@ -849,6 +854,7 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService itemPO.setCreator(uid); getSalaryItemMapper().updateIgnoreNull(itemPO); } else { + itemPO.setId(IdGenerator.generate()); getSalaryItemMapper().insertIgnoreNull(itemPO); } diff --git a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java index 4f33cef76..6ecf631ac 100644 --- a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java @@ -42,6 +42,7 @@ import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.util.valid.RuntimeTypeEnum; import com.engine.salary.util.valid.ValidUtil; import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; @@ -62,6 +63,7 @@ import java.util.stream.Collectors; * @author qiantao * @version 1.0 **/ +@Slf4j public class SalarySobServiceImpl extends Service implements SalarySobService { @@ -592,18 +594,18 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { salarySobPO.setUpdateTime(new Date()); salarySobMapper.updateById(salarySobPO); // 记录日志 - String operateTypeName = Objects.equals(disableParam.getDisable(), NumberUtils.INTEGER_ONE) ? - SalaryI18nUtil.getI18nLabel(0, "禁用薪资账套") : SalaryI18nUtil.getI18nLabel(0, "启用薪资账套"); - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setUser(user); - loggerContext.setTargetId("" + salarySobPO.getId()); - loggerContext.setTargetName(salarySobPO.getName()); - loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(operateTypeName); - loggerContext.setOperatedesc(operateTypeName + ": " + salarySobPO.getName()); - loggerContext.setOldValues(oldSalarySobPO); - loggerContext.setNewValues(salarySobPO); - SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); + String operateTypeName = Objects.equals(disableParam.getDisable(), NumberUtils.INTEGER_ONE) ? + SalaryI18nUtil.getI18nLabel(0, "禁用薪资账套") : SalaryI18nUtil.getI18nLabel(0, "启用薪资账套"); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + salarySobPO.getId()); + loggerContext.setTargetName(salarySobPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(operateTypeName); + loggerContext.setOperatedesc(operateTypeName + ": " + salarySobPO.getName()); + loggerContext.setOldValues(oldSalarySobPO); + loggerContext.setNewValues(salarySobPO); + SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); } @Override @@ -658,18 +660,18 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { getSalarySobBackItemService(user).deleteBySalarySobIds(ids); // 删除薪资账套的校验规则 getSalarySobCheckRuleService(user).deleteBySalarySobIds(ids); - // 记录日志 - salarySobPOS.forEach(salarySobPO -> { - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setUser(user); - loggerContext.setTargetId("" + salarySobPO.getId()); - loggerContext.setTargetName(salarySobPO.getName()); - loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除薪资账套")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除薪资账套")); - loggerContext.setOldValues(salarySobPO); - SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); - }); + // 记录日志 + salarySobPOS.forEach(salarySobPO -> { + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + salarySobPO.getId()); + loggerContext.setTargetName(salarySobPO.getName()); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除薪资账套")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除薪资账套")); + loggerContext.setOldValues(salarySobPO); + SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); + }); } @Override @@ -764,15 +766,15 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { if (CollectionUtils.isNotEmpty(result.getSalarySobCheckRules())) { getSalarySobCheckRuleService(user).batchSave(result.getSalarySobCheckRules()); } - // 记录日志 - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setUser(user); - loggerContext.setTargetId("" + result.getSalarySob().getId()); - loggerContext.setTargetName(result.getSalarySob().getName()); - loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98570, "复制薪资账套")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98570, "复制薪资账套") + ": " + salarySobPO.getName()); - SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); + // 记录日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + result.getSalarySob().getId()); + loggerContext.setTargetName(result.getSalarySob().getName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(98570, "复制薪资账套")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(98570, "复制薪资账套") + ": " + salarySobPO.getName()); + SalaryElogConfig.salarySobLoggerTemplate.write(loggerContext); } @Override @@ -885,9 +887,13 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { SalaryItemPO salaryItemPO = salaryItemNameMap.get(salaryItem.getName()); if (salaryItemPO != null) { sobItem.setSalaryItemId(salaryItemPO.getId()); - }else{ - Long itemId = getSalaryItemService(user).add(salaryItem); - sobItem.setSalaryItemId(itemId); + } else { + SalaryItemPO itemPO = getSalaryItemService(user).getItem(salaryItem); + if (itemPO != null) { + sobItem.setSalaryItemId(itemPO.getId()); + }else { + log.error("item not found:{}",salaryItem); + } } } @@ -918,10 +924,14 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { if (salaryItem != null) { SalaryItemPO salaryItemPO = salaryItemNameMap.get(salaryItem.getName()); if (salaryItemPO != null) { - sobItem.setSalaryItem(salaryItemPO); - }else{ - Long itemId = getSalaryItemService(user).add(salaryItem); - sobItem.setSalaryItemId(itemId); + sobItem.setSalaryItemId(salaryItemPO.getId()); + } else { + SalaryItemPO itemPO = getSalaryItemService(user).getItem(salaryItem); + if (itemPO != null) { + sobItem.setSalaryItemId(itemPO.getId()); + }else { + log.error("item not found:{}",salaryItem); + } } } }); @@ -946,10 +956,14 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { if (salaryItem != null) { SalaryItemPO salaryItemPO = salaryItemNameMap.get(salaryItem.getName()); if (salaryItemPO != null) { - salarySobBackItem.setSalaryItem(salaryItemPO); - }else{ - Long itemId = getSalaryItemService(user).add(salaryItem); - salarySobBackItem.setSalaryItemId(itemId); + salarySobBackItem.setSalaryItemId(salaryItemPO.getId()); + } else { + SalaryItemPO itemPO = getSalaryItemService(user).getItem(salaryItem); + if (itemPO != null) { + salarySobBackItem.setSalaryItemId(itemPO.getId()); + }else { + log.error("item not found:{}",salaryItem); + } } } } diff --git a/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java b/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java index e3d24d810..912d2c587 100644 --- a/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java @@ -25,6 +25,7 @@ import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.util.valid.RuntimeTypeEnum; import com.engine.salary.util.valid.ValidUtil; import com.engine.salary.util.xml.XStreamUtil; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.util.IOUtils; import weaver.file.ImageFileManager; @@ -49,6 +50,7 @@ import java.util.Map; * @author qiantao * @version 1.0 **/ +@Slf4j public class SalarySystemConfigWrapper extends Service { private SalarySysConfService getSalarySysConfService(User user) { @@ -267,7 +269,8 @@ public class SalarySystemConfigWrapper extends Service { return response; } catch (Exception e) { - response.setErrorData(Collections.singletonList(ImportExcelResponse.Error.builder().message("文件读取失败!").build())); + log.error("迁入失败",e); + response.setErrorData(Collections.singletonList(ImportExcelResponse.Error.builder().message("迁入失败!").build())); return response; } finally { IOUtils.closeQuietly(fileInputStream); From 7250ed3520ddcb1d474496185c0473d837e80280 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 15 Aug 2024 17:03:17 +0800 Subject: [PATCH 043/124] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BB=84=E7=BB=87?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=BF=AB=E7=85=A7=EF=BC=8C=E4=B8=BB=E5=8A=A8?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=88=96=E8=80=85sql=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BA=BA=E5=91=98=E4=B8=A2=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctEmployeeBO.java | 47 ------------------- .../impl/SalaryAcctEmployeeServiceImpl.java | 7 ++- .../impl/SalaryEmployeeServiceImpl.java | 2 +- 3 files changed, 6 insertions(+), 50 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctEmployeeBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctEmployeeBO.java index 60058a59c..26e2b2670 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctEmployeeBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctEmployeeBO.java @@ -74,53 +74,6 @@ public class SalaryAcctEmployeeBO { }).collect(Collectors.toList()); } - /** - * 转换成薪资核算人员的po - * - * @param employeeIds - * @param salaryAcctRecord - * @param salaryArchiveTaxAgentData - * @param employeeId - * @return - */ - public static List convert2EmployeePO(Collection employeeIds, - SalaryAcctRecordPO salaryAcctRecord, - List salaryArchiveTaxAgentData, - Long employeeId) { - if (CollectionUtils.isEmpty(employeeIds)) { - return Collections.emptyList(); - } - List resultList = Lists.newArrayList(); - Map>> empIdKeyTaxAgentMap = SalaryEntityUtil.group2Map(salaryArchiveTaxAgentData, SalaryArchiveDataDTO::getEmployeeId, SalaryArchiveDataDTO::getTaxAgents); - Date now = new Date(); - for (Long id : employeeIds) { - Set taxAgentIds = Sets.newHashSet(); - Set> taxAgentSet = empIdKeyTaxAgentMap.getOrDefault(id, Collections.emptySet()); - for (List taxAgents : taxAgentSet) { - taxAgentIds.addAll(SalaryEntityUtil.properties(taxAgents, SalaryArchiveTaxAgentDataDTO::getTaxAgentId)); - } - if (CollectionUtils.isEmpty(taxAgentIds)) { - taxAgentIds.add(0L); - } - for (Long taxAgentId : taxAgentIds) { - SalaryAcctEmployeePO salaryAcctEmployee = SalaryAcctEmployeePO.builder() - .salaryAcctRecordId(salaryAcctRecord.getId()) - .salarySobId(salaryAcctRecord.getSalarySobId()) - .salaryMonth(salaryAcctRecord.getSalaryMonth()) - .employeeId(id) - .taxAgentId(taxAgentId) - .creator(employeeId) - .createTime(now) - .updateTime(now) - .deleteType(0) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .build(); - resultList.add(salaryAcctEmployee); - } - } - return resultList; - } - public static List convert2Employee(Collection employee, SalaryAcctRecordPO salaryAcctRecord, List salaryArchiveTaxAgentData, diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index 6d251cacf..621b2b068 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -403,10 +403,12 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct } Long taxAgentId = salarySobPO.getTaxAgentId(); + List employees = getSalaryEmployeeService(user).getEmployeeByIdsAll((List) saveParam.getEmployeeIds()); + // 查询薪资档案 List salaryArchiveDataDTOS = getSalaryArchiveService(user).getSalaryArchiveTaxAgentData(salarySobCycleDTO.getSalaryCycle(), saveParam.getEmployeeIds(), taxAgentId); // 转换成薪资核算人员po - List salaryAcctEmployeePOS = SalaryAcctEmployeeBO.convert2EmployeePO(saveParam.getEmployeeIds(), salaryAcctRecordPO, salaryArchiveDataDTOS, (long) user.getUID()); + List salaryAcctEmployeePOS = SalaryAcctEmployeeBO.convert2Employee(employees, salaryAcctRecordPO, salaryArchiveDataDTOS, (long) user.getUID()); //过滤不是扣缴义务人下的人员 @@ -565,8 +567,9 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct SalarySobCycleDTO salarySobCycleDTO = getSalarySobService(user).getSalarySobCycle(salaryAcctRecordPO.getSalarySobId(), SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth())); // 查询薪资档案,获取人员的个税扣缴义务人 List salaryArchiveDataDTOS = getSalaryArchiveService(user).getSalaryArchiveTaxAgentData(salarySobCycleDTO.getSalaryCycle(), employeeIds, taxAgentId); + List employees = getSalaryEmployeeService(user).getEmployeeByIdsAll(employeeIds); // 转换成薪资核算人员po - List newSalaryAcctEmployeePOS = SalaryAcctEmployeeBO.convert2EmployeePO(employeeIds, salaryAcctRecordPO, salaryArchiveDataDTOS, (long) user.getUID()); + List newSalaryAcctEmployeePOS = SalaryAcctEmployeeBO.convert2Employee(employees, salaryAcctRecordPO, salaryArchiveDataDTOS, (long) user.getUID()); newSalaryAcctEmployeePOS = newSalaryAcctEmployeePOS.stream().filter(po -> Objects.equals(taxAgentId, po.getTaxAgentId())).collect(Collectors.toList()); // 删除以前的薪资核算人员 getSalaryAcctEmployeeMapper().deleteBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecordId)); diff --git a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java index f02fa4688..d47671229 100644 --- a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java @@ -377,7 +377,7 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee } } }); - List employees = getSalaryEmployeeService(user).getEmployeeByIds(empIds); + List employees = getSalaryEmployeeService(user).getEmployeeByIdsAll(empIds); result.addAll(employees); // 从hrmresource和hrmresourcevirtual可能获取到重复人员数据,需要根据人员id去重 From be6e7bb78743368ad853e95711c68f0040d2d0a6 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 16 Aug 2024 11:08:57 +0800 Subject: [PATCH 044/124] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E5=AF=BC=E5=87=BAexcel=E5=8D=95=E5=85=83=E6=A0=BC=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsEmployeeWrapper.java | 53 ++++++++++++++---- .../impl/SalaryArchiveServiceImpl.java | 2 +- .../salary/util/excel/ExcelUtilPlus.java | 56 ++++++++++++++++--- 3 files changed, 91 insertions(+), 20 deletions(-) diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java index 262104e75..66eeff817 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java @@ -7,6 +7,7 @@ import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.component.SalaryWeaTable; +import com.engine.salary.component.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; @@ -21,6 +22,8 @@ import com.engine.salary.report.entity.param.SalaryStatisticsEmployeeSalaryQuery import com.engine.salary.report.service.SalaryStatisticsEmployeeService; import com.engine.salary.report.service.impl.SalaryStatisticsEmployeeServiceImpl; import com.engine.salary.report.util.ReportDataUtil; +import com.engine.salary.service.SalaryItemService; +import com.engine.salary.service.impl.SalaryItemServiceImpl; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.excel.ExcelUtilPlus; @@ -57,6 +60,10 @@ public class SalaryStatisticsEmployeeWrapper extends Service { return ServiceUtil.getService(SalaryStatisticsEmployeeServiceImpl.class, user); } + private SalaryItemService getSalaryItemService(User user) { + return ServiceUtil.getService(SalaryItemServiceImpl.class, user); + } + /** * 员工列表 * @@ -164,13 +171,13 @@ public class SalaryStatisticsEmployeeWrapper extends Service { if (record.containsKey(itemKey)) { if (Objects.nonNull(record.get(itemKey)) && StringUtils.isNotEmpty(record.get(itemKey).toString()) && NumberUtils.isCreatable(record.get(itemKey).toString())) { sumBigDecimal = sumBigDecimal.add(new BigDecimal(record.get(itemKey).toString())); - record.put(itemKey, ReportDataUtil.thousandthConvert(record.get(itemKey).toString())); + record.put(itemKey, record.get(itemKey).toString()); } } } // 薪资项目合计 if (queryParam.isExport()) { - countResultMap.put(itemKey, ReportDataUtil.thousandthConvert(sumBigDecimal.toString())); + countResultMap.put(itemKey, sumBigDecimal.toString()); } } } @@ -264,39 +271,61 @@ public class SalaryStatisticsEmployeeWrapper extends Service { queryParam.setExport(true); Map resultMap = salaryList(queryParam); List columns = (List)resultMap.get("columns"); - List salaryItemList = ((List)resultMap.get("salaryItems")); List> resultList = ((PageInfo>) resultMap.get("pageInfo")).getList(); Map countResult = (Map)resultMap.get("countResult"); Map columnMap = SalaryEntityUtil.convert2Map(columns, WeaTableColumn::getColumn); - List finalColumns = new ArrayList<>(); + // 获取薪资项目保留小数位数 + List salaryItemPOList = getSalaryItemService(user).listAll(); + Map salaryItemMap = SalaryEntityUtil.convert2Map(salaryItemPOList, item -> item.getId() + "_salaryItem"); + List finalColumns = new ArrayList<>(); queryParam.getColumns().forEach(col -> { WeaTableColumn column = columnMap.get(col); if (column != null) { - finalColumns.add(column); + SalaryItemPO salaryItemPO = salaryItemMap.get(column.getColumn()); + Integer pattern = salaryItemPO == null ? 0 : salaryItemPO.getPattern(); + String dataType = salaryItemPO == null ? SalaryDataTypeEnum.STRING.getValue() : salaryItemPO.getDataType(); + finalColumns.add(new WeaTableColumnGroup("100px", column.getText(), column.getColumn(), "false", pattern, dataType)); } }); - columns = finalColumns; List> rowList = new ArrayList<>(); // 表头 - rowList.add(columns.stream().map(WeaTableColumn::getText).collect(Collectors.toList())); + rowList.add(finalColumns); // 数据 for (Map valueMap : resultList) { List list = new ArrayList<>(); - for (WeaTableColumn column : columns) { - list.add(Util.null2String(valueMap.get(column.getColumn()))); + for (Object column : finalColumns) { + WeaTableColumnGroup col = (WeaTableColumnGroup)column; + if (col.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())) { + try { + list.add(new BigDecimal(Util.null2String(valueMap.get(col.getColumn())))); + } catch (Exception e) { + list.add(Util.null2String(valueMap.get(col.getColumn()))); + } + } else { + list.add(Util.null2String(valueMap.get(col.getColumn()))); + } } rowList.add(list); } // 合计 List sumRow = new ArrayList<>(); sumRow.add("总计"); - for (int i = 1; i < columns.size(); i++) { - sumRow.add(Util.null2String(countResult.get(columns.get(i).getColumn()))); + for (int i = 1; i < finalColumns.size(); i++) { + WeaTableColumnGroup weaTableColumnGroup = (WeaTableColumnGroup)finalColumns.get(i); + if (weaTableColumnGroup.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())) { + try { + sumRow.add(new BigDecimal(Util.null2String(countResult.get(weaTableColumnGroup.getColumn())))); + } catch (Exception e) { + sumRow.add(Util.null2String(countResult.get(weaTableColumnGroup.getColumn()))); + } + } else { + sumRow.add(Util.null2String(countResult.get(weaTableColumnGroup.getColumn()))); + } } rowList.add(sumRow); - return ExcelUtilPlus.genWorkbookV2(rowList, "薪资明细", true); + return ExcelUtilPlus.genWorkbookV2WithPattern(rowList, "薪资明细", true); } // public Map exportDetailList(SalaryStatisticsEmployeeDetailQueryParam queryParam) { diff --git a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java index b468c29d3..5165b6c50 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java @@ -619,7 +619,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "薪资档案") + "-" + name); loggerContext.setUser(user); SalaryElogConfig.salaryArchiveLoggerTemplate.write(loggerContext); - return ExcelUtilPlus.genWorkbookV2WithPattern(rows, sheetName); + return ExcelUtilPlus.genWorkbookV2WithPattern(rows, sheetName, false); } diff --git a/src/com/engine/salary/util/excel/ExcelUtilPlus.java b/src/com/engine/salary/util/excel/ExcelUtilPlus.java index 748c12c79..f301e8c23 100644 --- a/src/com/engine/salary/util/excel/ExcelUtilPlus.java +++ b/src/com/engine/salary/util/excel/ExcelUtilPlus.java @@ -6,11 +6,13 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.*; -import org.springframework.beans.BeanUtils; import java.awt.Color; import java.math.BigDecimal; -import java.util.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -70,7 +72,7 @@ public class ExcelUtilPlus { } - public static XSSFWorkbook genWorkbookV2WithPattern(List> rowList, String sheetName) { + public static XSSFWorkbook genWorkbookV2WithPattern(List> rowList, String sheetName, boolean lastRowRed) { XSSFWorkbook workbook = new XSSFWorkbook(); // 设置title样式 @@ -102,6 +104,19 @@ public class ExcelUtilPlus { cellStyle.setBorderTop(BorderStyle.THIN); cellStyle.setBorderBottom(BorderStyle.THIN); + XSSFCellStyle redCellStyle = workbook.createCellStyle(); + XSSFFont redFont = workbook.createFont(); + redFont.setFontName("宋体"); + redFont.setFontHeightInPoints((short) 10);// 设置字体大小 + redFont.setColor(new XSSFColor(new Color(0xFF3333), null)); + redFont.setBold(true); + redCellStyle.setWrapText(true); + redCellStyle.setFont(redFont);// 选择需要用到的字体格式 + redCellStyle.setBorderLeft(BorderStyle.THIN); + redCellStyle.setBorderRight(BorderStyle.THIN); + redCellStyle.setBorderTop(BorderStyle.THIN); + redCellStyle.setBorderBottom(BorderStyle.THIN); + XSSFSheet sheet = workbook.createSheet(sheetName); //自适应宽度 sheet.autoSizeColumn(0, true); @@ -124,20 +139,38 @@ public class ExcelUtilPlus { } HashMap numberCellStyleMap = new HashMap(); + HashMap numberRedCellStyleMap = new HashMap(); XSSFDataFormat df = workbook.createDataFormat(); patternList.stream().distinct().filter(a -> a != null).forEach(p -> { String start = "0."; if (p == 0) { start = "0"; } + + XSSFCellStyle numberRedCellStyle = workbook.createCellStyle(); + // 不能copy,在excel里编辑时背景变成了黑色 + // BeanUtils.copyProperties(redCellStyle, numberRedCellStyle); + numberRedCellStyle.setWrapText(true); + numberRedCellStyle.setBorderLeft(BorderStyle.THIN); + numberRedCellStyle.setBorderRight(BorderStyle.THIN); + numberRedCellStyle.setBorderTop(BorderStyle.THIN); + numberRedCellStyle.setBorderBottom(BorderStyle.THIN); + numberRedCellStyle.setFont(redFont); short format = df.getFormat(start + Stream.generate(() -> "0").limit(p).collect(Collectors.joining()) + "_ "); + numberRedCellStyle.setDataFormat(format); + numberRedCellStyleMap.put(p, numberRedCellStyle); XSSFCellStyle numberCellStyle = workbook.createCellStyle(); - BeanUtils.copyProperties(cellStyle, numberCellStyle); + // BeanUtils.copyProperties(cellStyle, numberCellStyle); + numberCellStyle.setFont(font);// 选择需要用到的字体格式 + numberCellStyle.setWrapText(true); + numberCellStyle.setBorderLeft(BorderStyle.THIN); + numberCellStyle.setBorderRight(BorderStyle.THIN); + numberCellStyle.setBorderTop(BorderStyle.THIN); + numberCellStyle.setBorderBottom(BorderStyle.THIN); numberCellStyle.setDataFormat(format); numberCellStyleMap.put(p, numberCellStyle); }); - for (int rowIndex = 1; rowIndex < rowList.size(); rowIndex++) { List infoList = rowList.get(rowIndex); XSSFRow row = sheet.createRow(rowIndex); @@ -149,16 +182,25 @@ public class ExcelUtilPlus { if (rowIndex == 0) { cell.setCellStyle(titleCellStyle); } else { - cell.setCellStyle(cellStyle); + if (lastRowRed && rowIndex == rowList.size() - 1) { + cell.setCellStyle(redCellStyle); + } else { + cell.setCellStyle(cellStyle); + } } Object o = infoList.get(cellIndex); if (o instanceof String) { cell.setCellType(CellType.STRING); cell.setCellValue(String.valueOf(o)); } else if (o instanceof BigDecimal) { + if (lastRowRed && rowIndex == rowList.size() - 1) { + cell.setCellStyle(numberRedCellStyleMap.get(patternList.get(cellIndex))); + } else { + cell.setCellStyle(numberCellStyleMap.get(patternList.get(cellIndex))); + } cell.setCellType(CellType.NUMERIC); + double value = o == null ? 0 : ((BigDecimal) o).doubleValue(); cell.setCellValue(o == null ? 0 : ((BigDecimal) o).doubleValue()); - cell.setCellStyle(numberCellStyleMap.get(patternList.get(cellIndex))); } else if (o instanceof Boolean) { cell.setCellType(CellType.BOOLEAN); cell.setCellValue(String.valueOf(o)); From 673699dfb8b9268aa9acbe7b625613a883e4b219 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 16 Aug 2024 11:18:27 +0800 Subject: [PATCH 045/124] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/cache/SalaryCacheKey.java | 3 + .../service/SalaryArchiveItemService.java | 3 +- .../salary/service/SalaryItemService.java | 4 +- .../salary/service/SalarySobService.java | 3 +- .../salary/service/TaxAgentBaseService.java | 3 +- .../salary/service/TaxAgentService.java | 3 +- .../impl/SalaryArchiveItemServiceImpl.java | 21 ++++- .../service/impl/SalaryItemServiceImpl.java | 34 +++---- .../service/impl/SalarySobServiceImpl.java | 38 ++++++-- .../service/impl/TaxAgentBaseServiceImpl.java | 13 ++- .../service/impl/TaxAgentServiceImpl.java | 21 ++++- ...onfigParam.java => UploadConfigParam.java} | 2 +- .../sys/entity/vo/UploadConfigResponse.java | 30 ++++++ .../sys/service/SalarySysConfService.java | 3 +- .../impl/SalarySysConfServiceImpl.java | 40 ++++---- .../salary/web/SalaryCommonController.java | 2 +- .../web/SalarySystemConfigController.java | 6 +- .../salary/wrapper/SalaryCommonWrapper.java | 2 +- .../wrapper/SalarySystemConfigWrapper.java | 92 ++++++++++++------- 19 files changed, 227 insertions(+), 96 deletions(-) rename src/com/engine/salary/sys/entity/param/{uploadConfigParam.java => UploadConfigParam.java} (92%) create mode 100644 src/com/engine/salary/sys/entity/vo/UploadConfigResponse.java diff --git a/src/com/engine/salary/cache/SalaryCacheKey.java b/src/com/engine/salary/cache/SalaryCacheKey.java index 642a499c7..4d0d19280 100644 --- a/src/com/engine/salary/cache/SalaryCacheKey.java +++ b/src/com/engine/salary/cache/SalaryCacheKey.java @@ -70,4 +70,7 @@ public class SalaryCacheKey { public final static String SALARY_REPORT_DATA = "SALARY_REPORT_DATA_"; + public final static String UPLOAD_SALARY_CONFIG = "UPLOAD_SALARY_CONFIG"; + + } diff --git a/src/com/engine/salary/service/SalaryArchiveItemService.java b/src/com/engine/salary/service/SalaryArchiveItemService.java index 0489b7ce6..9d9081bd8 100644 --- a/src/com/engine/salary/service/SalaryArchiveItemService.java +++ b/src/com/engine/salary/service/SalaryArchiveItemService.java @@ -7,6 +7,7 @@ import com.engine.salary.entity.salaryarchive.param.SalaryItemAdjustBeforeParam; import com.engine.salary.entity.salaryarchive.param.SalaryItemAdjustRecordQueryParam; import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.sys.entity.vo.UploadConfigResponse; import com.engine.salary.util.page.PageInfo; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -161,5 +162,5 @@ public interface SalaryArchiveItemService { ArchiveFieldConfig getConfig(); - void parseConfig(ArchiveFieldConfig config); + UploadConfigResponse.Result parseConfig(ArchiveFieldConfig config); } diff --git a/src/com/engine/salary/service/SalaryItemService.java b/src/com/engine/salary/service/SalaryItemService.java index b9206c735..3fa1409d6 100644 --- a/src/com/engine/salary/service/SalaryItemService.java +++ b/src/com/engine/salary/service/SalaryItemService.java @@ -6,6 +6,7 @@ import com.engine.salary.entity.salaryitem.param.*; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.enums.SalarySystemTypeEnum; import com.engine.salary.service.impl.SalaryItemServiceImpl; +import com.engine.salary.sys.entity.vo.UploadConfigResponse; import com.engine.salary.util.excel.ImportExcelResponse; import com.engine.salary.util.page.PageInfo; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -154,9 +155,8 @@ public interface SalaryItemService { SalaryItemAllConfig getConfig(); - void parseConfig(SalaryItemAllConfig salaryItemConfig); + UploadConfigResponse.Result parseConfig(SalaryItemAllConfig salaryItemConfig); - Long add(SalaryItemPO salaryItemPO); SalaryItemPO getItem(SalaryItemPO salaryItemPO); List getConfig(SalaryItemExportParam param); diff --git a/src/com/engine/salary/service/SalarySobService.java b/src/com/engine/salary/service/SalarySobService.java index a83e5a1a6..1056846fc 100644 --- a/src/com/engine/salary/service/SalarySobService.java +++ b/src/com/engine/salary/service/SalarySobService.java @@ -8,6 +8,7 @@ import com.engine.salary.entity.salarysob.param.SalarySobDuplicateParam; import com.engine.salary.entity.salarysob.param.SalarySobListQueryParam; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; +import com.engine.salary.sys.entity.vo.UploadConfigResponse; import com.engine.salary.util.page.PageInfo; import java.time.YearMonth; @@ -160,5 +161,5 @@ public interface SalarySobService { List getConfig(Long taxAgentId); - void parseConfig(Long taxAgentId, List salarySobConfigs); + List parseConfig(Long taxAgentId, List salarySobConfigs); } diff --git a/src/com/engine/salary/service/TaxAgentBaseService.java b/src/com/engine/salary/service/TaxAgentBaseService.java index 6c70f4e4a..de468d8df 100644 --- a/src/com/engine/salary/service/TaxAgentBaseService.java +++ b/src/com/engine/salary/service/TaxAgentBaseService.java @@ -2,6 +2,7 @@ package com.engine.salary.service; import com.engine.salary.entity.taxagent.param.TaxAgentSaveBaseParam; import com.engine.salary.entity.taxagent.po.TaxAgentBasePO; +import com.engine.salary.sys.entity.vo.UploadConfigResponse; /** * 个税扣缴义务人基础信息 @@ -37,5 +38,5 @@ public interface TaxAgentBaseService { TaxAgentBasePO getConfig(); - void parseConfig(TaxAgentBasePO config); + UploadConfigResponse.Result parseConfig(TaxAgentBasePO config); } diff --git a/src/com/engine/salary/service/TaxAgentService.java b/src/com/engine/salary/service/TaxAgentService.java index 3f798adcd..bd2dedab4 100644 --- a/src/com/engine/salary/service/TaxAgentService.java +++ b/src/com/engine/salary/service/TaxAgentService.java @@ -12,6 +12,7 @@ import com.engine.salary.entity.taxagent.po.TaxAgentEmployeePO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.salarysob.SalaryEmployeeStatusEnum; import com.engine.salary.enums.taxagent.TaxAgentRoleTypeEnum; +import com.engine.salary.sys.entity.vo.UploadConfigResponse; import com.engine.salary.util.page.PageInfo; import java.util.Collection; @@ -262,5 +263,5 @@ public interface TaxAgentService { List getConfig(); - void parseConfig(List configs); + List parseConfig(List configs); } diff --git a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java index 00e886887..1c28ed5b2 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java @@ -1,5 +1,6 @@ package com.engine.salary.service.impl; +import cn.hutool.core.util.StrUtil; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; @@ -26,6 +27,7 @@ import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.archive.SalaryArchiveItemMapper; import com.engine.salary.mapper.salaryitem.SalaryItemMapper; import com.engine.salary.service.*; +import com.engine.salary.sys.entity.vo.UploadConfigResponse; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.SalaryLoggerUtil; @@ -752,18 +754,25 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi } @Override - public void parseConfig(ArchiveFieldConfig config) { + public UploadConfigResponse.Result parseConfig(ArchiveFieldConfig config) { + UploadConfigResponse.Result result = UploadConfigResponse.Result.builder() + .message("档案字段加载完毕") + .success(new ArrayList<>()) + .warning(new ArrayList<>()) + .error(new ArrayList<>()) + .build(); long uid = user.getUID(); List salaryItemPOList = getSalaryItemService(user).listAll(); - Map idMap = SalaryEntityUtil.convert2Map(salaryItemPOList, SalaryItemPO::getId); Map nameMap = SalaryEntityUtil.convert2Map(salaryItemPOList, SalaryItemPO::getName); Map codeMap = SalaryEntityUtil.convert2Map(salaryItemPOList, SalaryItemPO::getCode); - Optional.ofNullable(config .getSalaryItems()) .orElse(new ArrayList<>()) .forEach(itemPO -> { if (nameMap.containsKey(itemPO.getName())) { SalaryItemPO salaryItemPO = nameMap.get(itemPO.getName()); + if (!StrUtil.equals(salaryItemPO.getCode(), itemPO.getCode())) { + result.getWarning().add(String.format("警告,档案字段[%s]名称已存在,但项目code不一致,迁入code:%s,当前系统code:%s", itemPO.getName(), itemPO.getCode(), salaryItemPO.getCode())); + } itemPO.setId(salaryItemPO.getId()); //不许修改code itemPO.setCode(null); @@ -771,6 +780,9 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi getSalaryItemMapper().updateIgnoreNull(itemPO); } else if (codeMap.containsKey(itemPO.getCode())) { SalaryItemPO salaryItemPO = codeMap.get(itemPO.getCode()); + if (!StrUtil.equals(salaryItemPO.getName(), itemPO.getName())) { + result.getWarning().add(String.format("警告,档案字段[%s]code已存在,但项目code不一致,迁入名称:%s,当前系统名称:%s", itemPO.getName(), itemPO.getName(), salaryItemPO.getName())); + } itemPO.setId(salaryItemPO.getId()); //不许修改名字 itemPO.setName(null); @@ -780,7 +792,10 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi itemPO.setId(IdGenerator.generate()); getSalaryItemMapper().insertIgnoreNull(itemPO); } + result.getSuccess().add(String.format("成功,薪资项目[%s]加载成功", itemPO.getName())); }); + + return result; } } diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index bdf86e28f..4b10460ab 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -31,6 +31,7 @@ import com.engine.salary.enums.sicategory.SharedTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salaryitem.SalaryItemMapper; import com.engine.salary.service.*; +import com.engine.salary.sys.entity.vo.UploadConfigResponse; import com.engine.salary.util.JsonUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; @@ -799,29 +800,23 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService } @Override - public void parseConfig(SalaryItemAllConfig salaryItemConfig) { + public UploadConfigResponse.Result parseConfig(SalaryItemAllConfig salaryItemConfig) { + UploadConfigResponse.Result result = UploadConfigResponse.Result.builder() + .message("薪资项目加载完毕") + .success(new ArrayList<>()) + .warning(new ArrayList<>()) + .error(new ArrayList<>()) + .build(); List salaryItemPOList = listAll(); - Map idMap = SalaryEntityUtil.convert2Map(salaryItemPOList, SalaryItemPO::getId); Map nameMap = SalaryEntityUtil.convert2Map(salaryItemPOList, SalaryItemPO::getName); Map codeMap = SalaryEntityUtil.convert2Map(salaryItemPOList, SalaryItemPO::getCode); Optional.ofNullable(salaryItemConfig.getSalaryItems()) .orElse(new ArrayList<>()) .forEach(itemPO -> { - add(itemPO, idMap, nameMap, codeMap); + add(itemPO, nameMap, codeMap, result); }); - } - - @Override - public Long add(SalaryItemPO itemPO) { - - List salaryItemPOList = listAll(); - Map idMap = SalaryEntityUtil.convert2Map(salaryItemPOList, SalaryItemPO::getId); - Map nameMap = SalaryEntityUtil.convert2Map(salaryItemPOList, SalaryItemPO::getName); - Map codeMap = SalaryEntityUtil.convert2Map(salaryItemPOList, SalaryItemPO::getCode); - - return add(itemPO, idMap, nameMap, codeMap); - + return result; } @Override @@ -834,13 +829,16 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService } - private Long add(SalaryItemPO itemPO, Map idMap, Map nameMap, Map codeMap) { + private Long add(SalaryItemPO itemPO, Map nameMap, Map codeMap, UploadConfigResponse.Result result) { long uid = user.getUID(); Long formulaId = getSalaryFormulaService(user).add(itemPO.getFormula()); itemPO.setFormulaId(formulaId); if (nameMap.containsKey(itemPO.getName())) { SalaryItemPO salaryItemPO = nameMap.get(itemPO.getName()); + if (!StrUtil.equals(salaryItemPO.getCode(), itemPO.getCode())) { + result.getWarning().add(String.format("警告,薪资项目[%s]名称已存在,但项目code不一致,迁入code:%s,当前系统code:%s", itemPO.getName(), itemPO.getCode(), salaryItemPO.getCode())); + } itemPO.setId(salaryItemPO.getId()); //不许修改code itemPO.setCode(null); @@ -848,6 +846,9 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService getSalaryItemMapper().updateIgnoreNull(itemPO); } else if (codeMap.containsKey(itemPO.getCode())) { SalaryItemPO salaryItemPO = codeMap.get(itemPO.getCode()); + if (!StrUtil.equals(salaryItemPO.getName(), itemPO.getName())) { + result.getWarning().add(String.format("警告,薪资项目[%s]code已存在,但项目code不一致,迁入名称:%s,当前系统名称:%s", itemPO.getName(), itemPO.getName(), salaryItemPO.getName())); + } itemPO.setId(salaryItemPO.getId()); //不许修改名字 itemPO.setName(null); @@ -857,6 +858,7 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService itemPO.setId(IdGenerator.generate()); getSalaryItemMapper().insertIgnoreNull(itemPO); } + result.getSuccess().add(String.format("成功,薪资项目[%s]加载成功", itemPO.getName())); return itemPO.getId(); } diff --git a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java index 6ecf631ac..e97956523 100644 --- a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java @@ -30,6 +30,7 @@ import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.salarysob.SalarySobMapper; import com.engine.salary.mapper.taxagent.TaxAgentExtRangeMapper; import com.engine.salary.service.*; +import com.engine.salary.sys.entity.vo.UploadConfigResponse; import com.engine.salary.sys.enums.TaxDeclarationFunctionEnum; import com.engine.salary.sys.service.SalarySysConfService; import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; @@ -838,7 +839,8 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { } @Override - public void parseConfig(Long taxAgentId, List salarySobConfigs) { + public List parseConfig(Long taxAgentId, List salarySobConfigs) { + List results = new ArrayList<>(); long uid = user.getUID(); List salarySobPOS = listByTaxAgentId(taxAgentId); Map sobPOMap = SalaryEntityUtil.convert2Map(salarySobPOS, SalarySobPO::getName); @@ -849,6 +851,14 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { Optional.ofNullable(salarySobConfigs).orElse(new ArrayList<>()).forEach(salarySobConfig -> { SalarySobPO salarySobPO = salarySobConfig.getSalarySob(); String sobPOName = salarySobPO.getName(); + + UploadConfigResponse.Result result = UploadConfigResponse.Result.builder() + .message(String.format("账套:%s基础信息加载完毕", sobPOName)) + .success(new ArrayList<>()) + .warning(new ArrayList<>()) + .error(new ArrayList<>()) + .build(); + if (sobPOMap.containsKey(sobPOName)) { SalarySobPO oldSob = sobPOMap.get(sobPOName); salarySobPO.setId(oldSob.getId()); @@ -860,6 +870,8 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { getSalarySobMapper().insertIgnoreNull(salarySobPO); } + result.getSuccess().add(String.format("账套:%s基础信息加载成功", sobPOName)); + Long sobId = salarySobPO.getId(); getSalarySobEmpFieldService(user).deleteBySalarySobIds(Collections.singletonList(sobId)); List salarySobEmpFields = salarySobConfig.getSalarySobEmpFields(); @@ -870,7 +882,7 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { } getSalarySobEmpFieldService(user).batchSave(salarySobEmpFields); } - + result.getSuccess().add(String.format("账套:%s人员字段加载成功", sobPOName)); getSalarySobItemService(user).deleteBySalarySobIds(Collections.singletonList(sobId)); List salarySobItems = salarySobConfig.getSalarySobItems(); @@ -891,8 +903,9 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { SalaryItemPO itemPO = getSalaryItemService(user).getItem(salaryItem); if (itemPO != null) { sobItem.setSalaryItemId(itemPO.getId()); - }else { - log.error("item not found:{}",salaryItem); + } else { + result.getError().add(String.format("错误,账套:%s,薪资项目:%s,未找到对应薪资项目id", sobPOName, salaryItem.getName())); + log.error("item not found:{}", salaryItem); } } } @@ -929,8 +942,9 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { SalaryItemPO itemPO = getSalaryItemService(user).getItem(salaryItem); if (itemPO != null) { sobItem.setSalaryItemId(itemPO.getId()); - }else { - log.error("item not found:{}",salaryItem); + } else { + result.getError().add(String.format("错误,账套:%s,薪资项目:%s,未找到对应薪资项目id", sobPOName, salaryItem.getName())); + log.error("item not found:{}", salaryItem); } } } @@ -940,6 +954,7 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { } getSalarySobItemGroupService(user).batchSave(salarySobItemGroups); } + result.getSuccess().add(String.format("账套:%s薪资项目加载成功", sobPOName)); getSalarySobBackItemService(user).deleteBySalarySobIds(Collections.singletonList(sobId)); List salarySobBackItems = salarySobConfig.getSalarySobBackItems(); @@ -961,14 +976,16 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { SalaryItemPO itemPO = getSalaryItemService(user).getItem(salaryItem); if (itemPO != null) { salarySobBackItem.setSalaryItemId(itemPO.getId()); - }else { - log.error("item not found:{}",salaryItem); + } else { + result.getError().add(String.format("错误,账套:%s,薪资项目:%s,未找到对应薪资项目id", sobPOName, salaryItem.getName())); + log.error("item not found:{}", salaryItem); } } } } getSalarySobBackItemService(user).batchInsert(salarySobBackItems); } + result.getSuccess().add(String.format("账套:%s回算加载成功", sobPOName)); getSalarySobAdjustRuleService(user).deleteBySalarySobIds(Collections.singletonList(sobId)); List salarySobAdjustRules = salarySobConfig.getSalarySobAdjustRules(); @@ -980,7 +997,12 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { } getSalarySobAdjustRuleService(user).batchSave(salarySobAdjustRules); } + result.getSuccess().add(String.format("账套:%s调薪计薪规则加载成功", sobPOName)); + + results.add(result); }); + + return results; } diff --git a/src/com/engine/salary/service/impl/TaxAgentBaseServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentBaseServiceImpl.java index b851cbeab..9294c5b9d 100644 --- a/src/com/engine/salary/service/impl/TaxAgentBaseServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentBaseServiceImpl.java @@ -13,6 +13,7 @@ import com.engine.salary.mapper.taxagent.TaxAgentBaseMapper; import com.engine.salary.service.SIAccountService; import com.engine.salary.service.SalaryAcctRecordService; import com.engine.salary.service.TaxAgentBaseService; +import com.engine.salary.sys.entity.vo.UploadConfigResponse; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.db.IdGenerator; @@ -20,6 +21,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import weaver.hrm.User; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -113,15 +115,22 @@ public class TaxAgentBaseServiceImpl extends Service implements TaxAgentBaseServ } @Override - public void parseConfig(TaxAgentBasePO config) { + public UploadConfigResponse.Result parseConfig(TaxAgentBasePO config) { + UploadConfigResponse.Result result = UploadConfigResponse.Result.builder().message("分权配置加载完毕") + .success(new ArrayList<>()) + .warning(new ArrayList<>()) + .error(new ArrayList<>()) + .build(); TaxAgentBasePO baseInfo = getBaseInfo(); if (baseInfo == null) { config.setCreator((long) user.getUID()); getTaxAgentBaseMapper().insertIgnoreNull(config); - }else { + } else { baseInfo.setDevolutionStatus(config.getDevolutionStatus()); getTaxAgentBaseMapper().updateIgnoreNull(baseInfo); } + result.getSuccess().add("分权加载完毕,分权" + (config.getDevolutionStatus() == 1 ? "开启" : "关闭 ")); + return result; } /** diff --git a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java index a5ac92e71..8375cb1f7 100644 --- a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java @@ -4,9 +4,9 @@ import com.engine.common.service.HrmCommonService; import com.engine.common.service.impl.HrmCommonServiceImpl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryAuthConstant; -import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.entity.datacollection.AddUpDeduction; import com.engine.salary.entity.datacollection.AddUpSituation; import com.engine.salary.entity.datacollection.DataCollectionEmployee; @@ -43,6 +43,7 @@ import com.engine.salary.mapper.siaccount.InsuranceAccountBatchMapper; import com.engine.salary.mapper.siarchives.InsuranceBaseInfoMapper; import com.engine.salary.mapper.taxagent.TaxAgentMapper; import com.engine.salary.service.*; +import com.engine.salary.sys.entity.vo.UploadConfigResponse; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; @@ -815,7 +816,9 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { } @Override - public void parseConfig(List configs) { + public List parseConfig(List configs) { + List results = new ArrayList<>(); + List taxAgentPOS = listAll(); Map agentPOMap = SalaryEntityUtil.convert2Map(taxAgentPOS, TaxAgentPO::getName); @@ -824,6 +827,14 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { .forEach(config -> { TaxAgentPO taxAgent = config.getTaxAgent(); String name = taxAgent.getName(); + + UploadConfigResponse.Result taxResult = UploadConfigResponse.Result.builder() + .message(String.format("扣缴义务人%s加载完毕", name)) + .success(new ArrayList<>()) + .warning(new ArrayList<>()) + .error(new ArrayList<>()) + .build(); + if (agentPOMap.containsKey(name)) { //存在扣缴义务人 taxAgent = agentPOMap.get(name); @@ -832,10 +843,14 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { taxAgent.setCreator((long) user.getUID()); getTaxAgentMapper().insertIgnoreNull(taxAgent); } + taxResult.getSuccess().add(String.format("%s加载成功", name)); + results.add(taxResult); - getSalarySobService(user).parseConfig(taxAgent.getId(), config.getSalarySobConfigs()); + List sobResults = getSalarySobService(user).parseConfig(taxAgent.getId(), config.getSalarySobConfigs()); + results.addAll(sobResults); }); + return results; } diff --git a/src/com/engine/salary/sys/entity/param/uploadConfigParam.java b/src/com/engine/salary/sys/entity/param/UploadConfigParam.java similarity index 92% rename from src/com/engine/salary/sys/entity/param/uploadConfigParam.java rename to src/com/engine/salary/sys/entity/param/UploadConfigParam.java index 50c2f6c9e..6e104addc 100644 --- a/src/com/engine/salary/sys/entity/param/uploadConfigParam.java +++ b/src/com/engine/salary/sys/entity/param/UploadConfigParam.java @@ -17,7 +17,7 @@ import lombok.NoArgsConstructor; @Builder @NoArgsConstructor @AllArgsConstructor -public class uploadConfigParam { +public class UploadConfigParam { //上传文件id String imageId; diff --git a/src/com/engine/salary/sys/entity/vo/UploadConfigResponse.java b/src/com/engine/salary/sys/entity/vo/UploadConfigResponse.java new file mode 100644 index 000000000..f15dda773 --- /dev/null +++ b/src/com/engine/salary/sys/entity/vo/UploadConfigResponse.java @@ -0,0 +1,30 @@ +package com.engine.salary.sys.entity.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class UploadConfigResponse { + + private boolean finish; + + private List results; + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class Result { + String message; + List success; + List warning; + List error; + } +} diff --git a/src/com/engine/salary/sys/service/SalarySysConfService.java b/src/com/engine/salary/sys/service/SalarySysConfService.java index b11e547f1..91eab5317 100644 --- a/src/com/engine/salary/sys/service/SalarySysConfService.java +++ b/src/com/engine/salary/sys/service/SalarySysConfService.java @@ -6,6 +6,7 @@ import com.engine.salary.sys.entity.param.OrderRuleParam; import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.sys.entity.vo.AppSettingVO; import com.engine.salary.sys.entity.vo.OrderRuleVO; +import com.engine.salary.sys.entity.vo.UploadConfigResponse; import com.engine.salary.sys.enums.TaxDeclarationFunctionEnum; import java.util.Date; @@ -141,5 +142,5 @@ public interface SalarySysConfService { SysConfig getConfig(); - void parseConfig(SysConfig config); + UploadConfigResponse.Result parseConfig(SysConfig config); } diff --git a/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java b/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java index 39113a738..bcd6aa3cc 100644 --- a/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java +++ b/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java @@ -1,5 +1,6 @@ package com.engine.salary.sys.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.cloudstore.dev.api.util.Util_DataCache; import com.engine.common.util.ServiceUtil; @@ -45,6 +46,7 @@ import com.engine.salary.sys.entity.param.OrderRuleParam; import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.sys.entity.vo.AppSettingVO; import com.engine.salary.sys.entity.vo.OrderRuleVO; +import com.engine.salary.sys.entity.vo.UploadConfigResponse; import com.engine.salary.sys.enums.*; import com.engine.salary.sys.service.SalarySysConfService; import com.engine.salary.util.SalaryEntityUtil; @@ -522,25 +524,31 @@ public class SalarySysConfServiceImpl extends Service implements SalarySysConfSe } @Override - public void parseConfig(SysConfig config) { + public UploadConfigResponse.Result parseConfig(SysConfig config) { + UploadConfigResponse.Result result = UploadConfigResponse.Result.builder() + .message("系统配置加载完毕") + .success(new ArrayList<>()) + .warning(new ArrayList<>()) + .error(new ArrayList<>()) + .build(); + List salarySysConfs = config.getSalarySysConfs(); - if (CollectionUtils.isEmpty(salarySysConfs)) { - return; + if (CollectionUtil.isNotEmpty((salarySysConfs))) { + + salarySysConfs.forEach(po -> { + SalarySysConfPO sysConfPO = getSalarySysConfMapper().getOneByCode(po.getConfKey()); + if (sysConfPO == null) { + po.setId(IdGenerator.generate()); + getSalarySysConfMapper().insertIgnoreNull(po); + } else { + sysConfPO.setConfValue(po.getConfValue()); + getSalarySysConfMapper().updateIgnoreNull(sysConfPO); + } + result.getSuccess().add(String.format("[%s]配置,key:[%s],value:[%s]", po.getTitle(), po.getConfKey(), po.getConfValue())); + }); } - salarySysConfs.forEach(po -> { - SalarySysConfPO sysConfPO = getSalarySysConfMapper().getOneByCode(po.getConfKey()); - if (sysConfPO == null) { - po.setId(IdGenerator.generate()); - getSalarySysConfMapper().insertIgnoreNull(po); - } else { - sysConfPO.setConfValue(po.getConfValue()); - getSalarySysConfMapper().updateIgnoreNull(sysConfPO); - } - - }); - - + return result; } /** diff --git a/src/com/engine/salary/web/SalaryCommonController.java b/src/com/engine/salary/web/SalaryCommonController.java index ca7a439dc..7f1637a5c 100644 --- a/src/com/engine/salary/web/SalaryCommonController.java +++ b/src/com/engine/salary/web/SalaryCommonController.java @@ -40,7 +40,7 @@ public class SalaryCommonController { @Produces(MediaType.APPLICATION_JSON) public String getCacheInfo(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "key") String key) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getSalaryCommonWrapper(user)::getCacheInfo, key); + return new ResponseResult(user).run(getSalaryCommonWrapper(user)::getCacheInfo, key); } @GET diff --git a/src/com/engine/salary/web/SalarySystemConfigController.java b/src/com/engine/salary/web/SalarySystemConfigController.java index 84953493d..4586af8e3 100644 --- a/src/com/engine/salary/web/SalarySystemConfigController.java +++ b/src/com/engine/salary/web/SalarySystemConfigController.java @@ -6,9 +6,9 @@ import com.engine.salary.sys.entity.param.*; import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.sys.entity.vo.AppSettingVO; import com.engine.salary.sys.entity.vo.OrderRuleVO; +import com.engine.salary.sys.entity.vo.UploadConfigResponse; import com.engine.salary.sys.enums.TaxDeclarationFunctionEnum; import com.engine.salary.util.ResponseResult; -import com.engine.salary.util.excel.ImportExcelResponse; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.xml.XStreamUtil; import com.engine.salary.wrapper.SalarySystemConfigWrapper; @@ -367,9 +367,9 @@ public class SalarySystemConfigController { @POST @Path("/uploadConfig") @Produces(MediaType.APPLICATION_JSON) - public String initConfig(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody uploadConfigParam param) { + public String initConfig(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody UploadConfigParam param) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getSalarySystemConfigWrapper(user)::uploadConfig, param); + return new ResponseResult(user).run(getSalarySystemConfigWrapper(user)::uploadConfig, param); } diff --git a/src/com/engine/salary/wrapper/SalaryCommonWrapper.java b/src/com/engine/salary/wrapper/SalaryCommonWrapper.java index baec86d91..982c1e5e9 100644 --- a/src/com/engine/salary/wrapper/SalaryCommonWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryCommonWrapper.java @@ -13,7 +13,7 @@ public class SalaryCommonWrapper extends Service { return ServiceUtil.getService(SalaryCacheServiceImpl.class, user); } - public String getCacheInfo(String key) { + public Object getCacheInfo(String key) { return getSalaryCacheService(user).get(key); } diff --git a/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java b/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java index 912d2c587..d6a2c3f3c 100644 --- a/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySystemConfigWrapper.java @@ -2,6 +2,7 @@ package com.engine.salary.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.cache.SalaryCacheKey; import com.engine.salary.entity.config.SalaryConfig; import com.engine.salary.entity.salaryarchive.config.ArchiveFieldConfig; import com.engine.salary.entity.salaryitem.config.SalaryItemAllConfig; @@ -15,11 +16,11 @@ import com.engine.salary.sys.entity.param.*; import com.engine.salary.sys.entity.po.SalarySysConfPO; import com.engine.salary.sys.entity.vo.AppSettingVO; import com.engine.salary.sys.entity.vo.OrderRuleVO; +import com.engine.salary.sys.entity.vo.UploadConfigResponse; import com.engine.salary.sys.enums.TaxDeclarationFunctionEnum; import com.engine.salary.sys.service.SalarySysConfService; import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.SalaryEntityUtil; -import com.engine.salary.util.excel.ImportExcelResponse; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.util.valid.RuntimeTypeEnum; @@ -37,7 +38,7 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.nio.charset.StandardCharsets; -import java.util.Collections; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -77,6 +78,10 @@ public class SalarySystemConfigWrapper extends Service { return ServiceUtil.getService(TaxAgentBaseServiceImpl.class, user); } + private SalaryCacheService getSalaryCacheService(User user) { + return ServiceUtil.getService(SalaryCacheServiceImpl.class, user); + } + public Map info() { BaseBean baseBean = new BaseBean(); String log = baseBean.getPropValue("hrmSalary", "log"); @@ -236,44 +241,61 @@ public class SalarySystemConfigWrapper extends Service { return salaryConfig; } - public ImportExcelResponse uploadConfig(uploadConfigParam param) { + public UploadConfigResponse uploadConfig(UploadConfigParam param) { Boolean chief = getTaxAgentService(user).isChief((long) user.getUID()); if (!chief) { throw new SalaryRunTimeException("您不是薪酬总管理员,无法迁入配置!"); } - ImportExcelResponse response = ImportExcelResponse.builder().build(); - - InputStream fileInputStream = null; - try { - fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); - Reader reader = new InputStreamReader(fileInputStream, StandardCharsets.UTF_8); - BufferedReader bufferedReader = new BufferedReader(reader); - String line; - StringBuilder xml = new StringBuilder(); - while ((line = bufferedReader.readLine()) != null) { - xml.append(line); - } - - SalaryConfig config = XStreamUtil.unmarshal(SalaryConfig.class, xml.toString()); - - getSalarySysConfService(user).parseConfig(config.getSysConfig()); - - getSalaryItemService(user).parseConfig(config.getSalaryItemConfig()); - - getSalaryArchiveItemService(user).parseConfig(config.getArchiveFieldConfig()); - - getTaxAgentBaseService(user).parseConfig(config.getTaxAgentBaseConfig()); - - getTaxAgentService(user).parseConfig(config.getTaxAgentConfigs()); - - return response; - } catch (Exception e) { - log.error("迁入失败",e); - response.setErrorData(Collections.singletonList(ImportExcelResponse.Error.builder().message("迁入失败!").build())); - return response; - } finally { - IOUtils.closeQuietly(fileInputStream); + UploadConfigResponse lastResponse = getSalaryCacheService(user).get(SalaryCacheKey.UPLOAD_SALARY_CONFIG); + if (lastResponse != null && !lastResponse.isFinish()) { + throw new SalaryRunTimeException("迁入任务进行中,请等待上次任务完成!"); } + +// LocalRunnable localRunnable = new LocalRunnable() { +// @Override +// public void execute() { + UploadConfigResponse response = UploadConfigResponse.builder().finish(false).results(new ArrayList<>()).build(); + getSalaryCacheService(user).set(SalaryCacheKey.UPLOAD_SALARY_CONFIG, response); + + InputStream fileInputStream = null; + try { + fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); + Reader reader = new InputStreamReader(fileInputStream, StandardCharsets.UTF_8); + BufferedReader bufferedReader = new BufferedReader(reader); + String line; + StringBuilder xml = new StringBuilder(); + while ((line = bufferedReader.readLine()) != null) { + xml.append(line); + } + + SalaryConfig config = XStreamUtil.unmarshal(SalaryConfig.class, xml.toString()); + + UploadConfigResponse.Result sysConfigResult = getSalarySysConfService(user).parseConfig(config.getSysConfig()); + response.getResults().add(sysConfigResult); + + UploadConfigResponse.Result salaryItemResult = getSalaryItemService(user).parseConfig(config.getSalaryItemConfig()); + response.getResults().add(salaryItemResult); + + UploadConfigResponse.Result archiveFieldResult = getSalaryArchiveItemService(user).parseConfig(config.getArchiveFieldConfig()); + response.getResults().add(archiveFieldResult); + + UploadConfigResponse.Result taxAgentBaseResult = getTaxAgentBaseService(user).parseConfig(config.getTaxAgentBaseConfig()); + response.getResults().add(taxAgentBaseResult); + + List results = getTaxAgentService(user).parseConfig(config.getTaxAgentConfigs()); + response.getResults().addAll(results); + } catch (Exception e) { + log.error("加载失败", e); + } finally { + response.setFinish(true); + IOUtils.closeQuietly(fileInputStream); + } + getSalaryCacheService(user).set(SalaryCacheKey.UPLOAD_SALARY_CONFIG, response); +// } +// }; +// ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.HRM, "UPLOAD_SALARY_CONFIG", localRunnable); + + return response; } } From d23baeb9405b5bfa9759786e17672fc42406abcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 16 Aug 2024 12:19:18 +0800 Subject: [PATCH 046/124] =?UTF-8?q?=E6=94=AF=E6=8C=81Vlookup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/SpecialAddDeductionService.java | 9 ++-- .../impl/SpecialAddDeductionServiceImpl.java | 13 ++--- .../salary/util/excel/ExcelParseHelper.java | 53 ++++++++++++++++--- .../salary/util/excel/ExcelPreviewDTO.java | 18 +++++++ .../salary/util/excel/ExcelSupport.java | 41 +++++++++++--- .../web/SpecialAddDeductionController.java | 3 +- .../wrapper/SpecialAddDeductionWrapper.java | 3 +- 7 files changed, 112 insertions(+), 28 deletions(-) create mode 100644 src/com/engine/salary/util/excel/ExcelPreviewDTO.java diff --git a/src/com/engine/salary/service/SpecialAddDeductionService.java b/src/com/engine/salary/service/SpecialAddDeductionService.java index d2f893323..9879a6ab6 100644 --- a/src/com/engine/salary/service/SpecialAddDeductionService.java +++ b/src/com/engine/salary/service/SpecialAddDeductionService.java @@ -2,13 +2,16 @@ package com.engine.salary.service; import com.engine.salary.entity.datacollection.dto.SpecialAddDeductionListDTO; import com.engine.salary.entity.datacollection.dto.SpecialAddDeductionRecordDTO; -import com.engine.salary.entity.datacollection.param.*; +import com.engine.salary.entity.datacollection.param.SpecialAddDeductionImportParam; +import com.engine.salary.entity.datacollection.param.SpecialAddDeductionParam; +import com.engine.salary.entity.datacollection.param.SpecialAddDeductionQueryParam; +import com.engine.salary.entity.datacollection.param.SpecialAddDeductionRecordDeleteParam; import com.engine.salary.entity.datacollection.po.SpecialAddDeductionPO; +import com.engine.salary.util.excel.ExcelPreviewDTO; import com.engine.salary.util.page.PageInfo; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.time.YearMonth; -import java.util.Date; import java.util.List; import java.util.Map; @@ -61,7 +64,7 @@ public interface SpecialAddDeductionService { /** * 预览 */ - Map preview(SpecialAddDeductionImportParam importParam); + ExcelPreviewDTO preview(SpecialAddDeductionImportParam importParam); /** * 导入数据 diff --git a/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java b/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java index 7c8c14e64..a8e066705 100644 --- a/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java @@ -38,7 +38,7 @@ import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.excel.ExcelParseHelper; -import com.engine.salary.util.excel.ExcelSupport; +import com.engine.salary.util.excel.ExcelPreviewDTO; import com.engine.salary.util.excel.ExcelUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; @@ -46,7 +46,6 @@ import com.google.common.collect.Maps; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Validate; -import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.file.ImageFileManager; @@ -157,8 +156,7 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd @Override - public Map preview(SpecialAddDeductionImportParam importParam) { - Map apidatas = new HashMap(); + public ExcelPreviewDTO preview(SpecialAddDeductionImportParam importParam) { //excel文件id String imageId = Util.null2String(importParam.getImageId()); @@ -167,10 +165,7 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd InputStream fileInputStream = null; try { fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(imageId)); - Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); - apidatas.put("headers", ExcelSupport.getSheetHeader(sheet, 0)); - apidatas.put("list", ExcelParseHelper.parse2List(sheet, 1, 0)); - return apidatas; + return ExcelParseHelper.preview(fileInputStream, 0, EXCEL_TYPE_XLSX); } finally { IOUtils.closeQuietly(fileInputStream); } @@ -249,7 +244,7 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd //筛选导入人员信息可以在人力资源池中匹配到的人员信息 List emps = getSalaryEmployeeService(user) - .matchImportEmployee(confValue, employees, userName, deparmentName, mobile, workcode, idNo,null); + .matchImportEmployee(confValue, employees, userName, deparmentName, mobile, workcode, idNo, null); //含在职和离职,选在职数据 if (CollectionUtils.isNotEmpty(emps) && emps.size() > 1) { employeeSameIds = emps.stream() diff --git a/src/com/engine/salary/util/excel/ExcelParseHelper.java b/src/com/engine/salary/util/excel/ExcelParseHelper.java index c25d8b08d..0e9e0364b 100644 --- a/src/com/engine/salary/util/excel/ExcelParseHelper.java +++ b/src/com/engine/salary/util/excel/ExcelParseHelper.java @@ -3,7 +3,9 @@ package com.engine.salary.util.excel; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.exception.ContextedRuntimeException; +import org.apache.poi.ss.usermodel.FormulaEvaluator; import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; import org.springframework.web.multipart.MultipartFile; import java.io.InputStream; @@ -88,7 +90,7 @@ public class ExcelParseHelper { for (; rowIndex < rowCount; rowIndex++) { List cellResult = new ArrayList(); for (int j = 0; j < cellCount; j++) { - cellResult.add(ExcelSupport.getCellValue(sheet, rowIndex, j)); + cellResult.add(ExcelSupport.getCellValue(sheet,null, rowIndex, j)); } result.add(cellResult); } @@ -104,17 +106,21 @@ public class ExcelParseHelper { * @return 二维数据集合 */ private static List> parse2Map(InputStream file, int sheetIndex, int rowIndex, int standardCellNum, String fileName) { - Sheet sheet = ExcelSupport.parseFile(file, sheetIndex, fileName); + Workbook workbook = ExcelSupport.parseFile(file, fileName); + Sheet sheet = workbook.getSheetAt(sheetIndex); int rowCount = sheet.getPhysicalNumberOfRows(); // 总行数 int cellCount = sheet.getRow(PARSE_EXCEL_ROW_VALID_CELL_INDEX).getPhysicalNumberOfCells(); // 总列数 Validate.isTrue(standardCellNum == cellCount, "Error in excel template! Page %s sheet should have %s column data, existing in %s column , please check the template!", sheetIndex, standardCellNum, cellCount); + // 创建一个公式求值器对象 + FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); + List> result = new ArrayList>(); for (; rowIndex < rowCount; rowIndex++) { List cellResult = new ArrayList(); for (int j = 0; j < cellCount; j++) { - cellResult.add(ExcelSupport.getCellValue(sheet, rowIndex, j)); + cellResult.add(ExcelSupport.getCellValue(sheet,evaluator, rowIndex, j)); } result.add(cellResult); } @@ -142,7 +148,7 @@ public class ExcelParseHelper { Map cellResult = new HashMap<>(); for (int j = 0; j < cellCount; j++) { String key = sheetHeader.get(j); - cellResult.put(key, ExcelSupport.getCellValue(sheet, rowIndex, j)); + cellResult.put(key, ExcelSupport.getCellValue(sheet,null, rowIndex, j)); } result.add(cellResult); } @@ -167,7 +173,7 @@ public class ExcelParseHelper { Map cellResult = new HashMap<>(); for (int j = 0; j < cellCount; j++) { String key = sheetHeader.get(j); - cellResult.put(key, ExcelSupport.getCellValue(sheet, rowIndex, j)); + cellResult.put(key, ExcelSupport.getCellValue(sheet, null,rowIndex, j)); } result.add(cellResult); } @@ -192,7 +198,7 @@ public class ExcelParseHelper { Map cellResult = new HashMap<>(); for (int j = 0; j < cellCount; j++) { String key = sheetHeader.get(j); - cellResult.put(key, ExcelSupport.getCellValue(sheet, rowIndex, j)); + cellResult.put(key, ExcelSupport.getCellValue(sheet, null,rowIndex, j)); } result.add(cellResult); } @@ -213,7 +219,7 @@ public class ExcelParseHelper { for (; rowIndex < rowCount; rowIndex++) { List cellResult = new ArrayList(); for (int j = 0; j < cellCount; j++) { - cellResult.add(ExcelSupport.getCellValue(sheet, rowIndex, j)); + cellResult.add(ExcelSupport.getCellValue(sheet,null, rowIndex, j)); } result.add(cellResult); } @@ -234,7 +240,28 @@ public class ExcelParseHelper { for (; rowIndex < rowCount; rowIndex++) { List cellResult = new ArrayList(); for (int j = 0; j < cellCount; j++) { - cellResult.add(ExcelSupport.getCellValue(sheet, rowIndex, j)); + cellResult.add(ExcelSupport.getCellValue(sheet,null, rowIndex, j)); + } + result.add(cellResult); + } + return result; + } + + /** + * 将sheet数据转为List + * @param rowIndex 从哪行开始解析 + * @param headerRowIndex 抽取列数的参考行 + * @return + */ + public static List> parse2List(Sheet sheet, FormulaEvaluator evaluator ,int rowIndex, int headerRowIndex) { + int rowCount = sheet.getPhysicalNumberOfRows(); // 总行数 + int cellCount = sheet.getRow(headerRowIndex).getPhysicalNumberOfCells(); // 总列数 + + List> result = new ArrayList>(); + for (; rowIndex < rowCount; rowIndex++) { + List cellResult = new ArrayList(); + for (int j = 0; j < cellCount; j++) { + cellResult.add(ExcelSupport.getCellValue(sheet,evaluator, rowIndex, j)); } result.add(cellResult); } @@ -310,4 +337,14 @@ public class ExcelParseHelper { } return val; } + + public static ExcelPreviewDTO preview(InputStream fileInputStream, int i, String excelTypeXlsx) { + Workbook workbook = ExcelSupport.parseFile(fileInputStream, EXCEL_TYPE_XLSX); + // 创建一个公式求值器对象 + FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); + Sheet sheet = workbook.getSheetAt(i); + return ExcelPreviewDTO.builder() + .headers(ExcelSupport.getSheetHeader(sheet, 0)) + .list(ExcelParseHelper.parse2List(sheet, evaluator ,1, 0)).build(); + } } diff --git a/src/com/engine/salary/util/excel/ExcelPreviewDTO.java b/src/com/engine/salary/util/excel/ExcelPreviewDTO.java new file mode 100644 index 000000000..69135fbf0 --- /dev/null +++ b/src/com/engine/salary/util/excel/ExcelPreviewDTO.java @@ -0,0 +1,18 @@ +package com.engine.salary.util.excel; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ExcelPreviewDTO { + private List headers; + + private List> list; +} diff --git a/src/com/engine/salary/util/excel/ExcelSupport.java b/src/com/engine/salary/util/excel/ExcelSupport.java index a13341a87..8ba0aa7f6 100644 --- a/src/com/engine/salary/util/excel/ExcelSupport.java +++ b/src/com/engine/salary/util/excel/ExcelSupport.java @@ -50,13 +50,34 @@ public class ExcelSupport { } } + /** + * 解析文件,获取单个sheet + * + * @return sheet + */ + public static Workbook parseFile(InputStream ins, String fileName) { + Workbook workBook = null; + try { + if (fileName.endsWith(EXCEL_TYPE_XLSX)) { + workBook = new XSSFWorkbook(new BufferedInputStream(ins)); + } else if (fileName.endsWith(EXCEL_TYPE_XLS)) { + workBook = new HSSFWorkbook(new BufferedInputStream(ins)); + } else { + throw new IllegalArgumentException("File format error! Only xlsx and xls types are supported"); + } + return workBook; + } catch (Exception e) { + throw new IllegalArgumentException(e); + } + } + /** * 解析文件,获取单个sheet * * @param sheetIndex sheet下标,从0开始 * @return sheet */ - public static Sheet parseFile(InputStream ins, int sheetIndex,String fileName) { + public static Sheet parseFile(InputStream ins, int sheetIndex, String fileName) { Workbook workBook = null; try { if (fileName.endsWith(EXCEL_TYPE_XLSX)) { @@ -93,16 +114,16 @@ public class ExcelSupport { /** - * 返回指定单元格的数据 + * 返回指定单元格的数据,支持Vlookup * * @param sheet 指定sheet * @param rowIndex 第几行,从0开始 * @param cellIndex 第几列,从0开始 * @return 值 */ - public static String getCellValue(Sheet sheet, int rowIndex, int cellIndex) { + public static String getCellValue(Sheet sheet, FormulaEvaluator evaluator, int rowIndex, int cellIndex) { Validate.notNull(sheet.getRow(rowIndex), "Line %s is empty and cannot be resolved", rowIndex); - return getCellValue(sheet.getRow(rowIndex).getCell(cellIndex)); + return getCellValue(sheet.getRow(rowIndex).getCell(cellIndex), evaluator); } @@ -111,7 +132,7 @@ public class ExcelSupport { /** * 格式化解析的数据 */ - public static String getCellValue(Cell cell) { + public static String getCellValue(Cell cell, FormulaEvaluator evaluator) { String cellValue = ""; if (cell != null) { switch (cell.getCellType()) { @@ -131,7 +152,15 @@ public class ExcelSupport { cellValue = String.valueOf(cell.getBooleanCellValue()); break; case FORMULA: // 公式类型 - cellValue = String.valueOf(cell.getCellFormula()); + if (evaluator != null) { + // 计算公式的值 + evaluator.evaluateFormulaCell(cell); + // 获取公式计算后的值 + cellValue = cell.getNumericCellValue() + ""; + } else { + cellValue = String.valueOf(cell.getCellFormula()); + } + break; case BLANK: // 空白类型 cellValue = ""; diff --git a/src/com/engine/salary/web/SpecialAddDeductionController.java b/src/com/engine/salary/web/SpecialAddDeductionController.java index 891f48d91..da67a4677 100644 --- a/src/com/engine/salary/web/SpecialAddDeductionController.java +++ b/src/com/engine/salary/web/SpecialAddDeductionController.java @@ -8,6 +8,7 @@ import com.engine.salary.entity.datacollection.param.SpecialAddDeductionParam; import com.engine.salary.entity.datacollection.param.SpecialAddDeductionQueryParam; import com.engine.salary.entity.datacollection.param.SpecialAddDeductionRecordDeleteParam; import com.engine.salary.util.ResponseResult; +import com.engine.salary.util.excel.ExcelPreviewDTO; import com.engine.salary.util.page.PageInfo; import com.engine.salary.wrapper.SpecialAddDeductionWrapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; @@ -271,7 +272,7 @@ public class SpecialAddDeductionController { @Produces(MediaType.APPLICATION_JSON) public String preview(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SpecialAddDeductionImportParam importParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>(user).run(getSpecialAddDeductionWrapper(user)::preview, importParam); + return new ResponseResult(user).run(getSpecialAddDeductionWrapper(user)::preview, importParam); } @POST diff --git a/src/com/engine/salary/wrapper/SpecialAddDeductionWrapper.java b/src/com/engine/salary/wrapper/SpecialAddDeductionWrapper.java index c5e571950..1e2586096 100644 --- a/src/com/engine/salary/wrapper/SpecialAddDeductionWrapper.java +++ b/src/com/engine/salary/wrapper/SpecialAddDeductionWrapper.java @@ -18,6 +18,7 @@ import com.engine.salary.service.impl.SalaryEmployeeServiceImpl; import com.engine.salary.service.impl.SpecialAddDeductionServiceImpl; import com.engine.salary.service.impl.TaxAgentServiceImpl; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.excel.ExcelPreviewDTO; import com.engine.salary.util.page.PageInfo; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.User; @@ -154,7 +155,7 @@ public class SpecialAddDeductionWrapper extends Service { /** * 预览 */ - public Map preview(SpecialAddDeductionImportParam importParam){ + public ExcelPreviewDTO preview(SpecialAddDeductionImportParam importParam){ return getSpecialAddDeductionService(user).preview(importParam); } From 1d388a1993da659702f51fc41fd61a4c60eb4f98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 16 Aug 2024 14:04:20 +0800 Subject: [PATCH 047/124] =?UTF-8?q?=E6=94=AF=E6=8C=81Vlookup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/VariableArchiveService.java | 3 +- .../impl/VariableArchiveServiceImpl.java | 33 +++++++++---------- .../salary/web/VariableArchiveController.java | 3 +- .../wrapper/VariableArchiveWrapper.java | 3 +- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/com/engine/salary/service/VariableArchiveService.java b/src/com/engine/salary/service/VariableArchiveService.java index 1a992eff4..f82fcc031 100644 --- a/src/com/engine/salary/service/VariableArchiveService.java +++ b/src/com/engine/salary/service/VariableArchiveService.java @@ -5,6 +5,7 @@ import com.engine.salary.entity.datacollection.dto.VariableItemListDTO; import com.engine.salary.entity.datacollection.param.VariableArchiveImportHandleParam; import com.engine.salary.entity.datacollection.param.VariableArchiveQueryParam; import com.engine.salary.entity.datacollection.param.VariableArchiveSaveParam; +import com.engine.salary.util.excel.ExcelPreviewDTO; import com.engine.salary.util.page.PageInfo; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -60,7 +61,7 @@ public interface VariableArchiveService { XSSFWorkbook downloadTemplate(VariableArchiveQueryParam param); - Map preview(VariableArchiveImportHandleParam importParam); + ExcelPreviewDTO preview(VariableArchiveImportHandleParam importParam); Map importData(VariableArchiveImportHandleParam importParam); diff --git a/src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java b/src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java index 73bbac9e4..f28c337ce 100644 --- a/src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java @@ -30,10 +30,7 @@ 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.ExcelComment; -import com.engine.salary.util.excel.ExcelParseHelper; -import com.engine.salary.util.excel.ExcelSupport; -import com.engine.salary.util.excel.ExcelUtilPlus; +import com.engine.salary.util.excel.*; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.util.valid.ValidUtil; @@ -44,6 +41,7 @@ import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.file.ImageFileManager; @@ -65,7 +63,7 @@ import static com.engine.salary.util.excel.ExcelSupport.EXCEL_TYPE_XLSX; */ public class VariableArchiveServiceImpl extends Service implements VariableArchiveService { - private VariableArchiveMapper getVariableArchiveMapper(){ + private VariableArchiveMapper getVariableArchiveMapper() { return MapperProxyFactory.getProxy(VariableArchiveMapper.class); } @@ -98,6 +96,7 @@ public class VariableArchiveServiceImpl extends Service implements VariableArchi /** * 浮动薪酬档案列表 + * * @param queryParam * @return */ @@ -108,7 +107,7 @@ public class VariableArchiveServiceImpl extends Service implements VariableArchi } @Override - public List list(VariableArchiveQueryParam queryParam) { + public List list(VariableArchiveQueryParam queryParam) { ValidUtil.doValidator(queryParam); Long employeeId = Long.valueOf(user.getUID()); // 判断是否是“总管理员” @@ -151,7 +150,7 @@ public class VariableArchiveServiceImpl extends Service implements VariableArchi } List variableArchiveIds = variableArchives.stream().map(VariableArchiveListDTO::getId).collect(Collectors.toList()); // 获取浮动薪资档案所对应的浮动薪资项目数据 - List variableArchiveItemList= getVariableArchiveItemService(user).listByVariableArchiveIds(variableArchiveIds); + List variableArchiveItemList = getVariableArchiveItemService(user).listByVariableArchiveIds(variableArchiveIds); Map> variableArchiveItemMap = SalaryEntityUtil.group2Map(variableArchiveItemList, VariableArchiveItemPO::getVariableArchiveId); List> variableArchiveItemData = variableArchives.stream().map(m -> { Map map = Maps.newHashMap(); @@ -269,7 +268,7 @@ public class VariableArchiveServiceImpl extends Service implements VariableArchi //动态列组装 List columns = VariableArchiveBO.buildVariableArchiveTable(variableItems); - columns.add(0,new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(85429, "薪资所属月"), "salaryMonth")); + columns.add(0, new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(85429, "薪资所属月"), "salaryMonth")); Map datas = new HashMap<>(); datas.put("data", resultMap); @@ -344,8 +343,7 @@ public class VariableArchiveServiceImpl extends Service implements VariableArchi } @Override - public Map preview(VariableArchiveImportHandleParam importParam) { - Map apidatas = new HashMap(); + public ExcelPreviewDTO preview(VariableArchiveImportHandleParam importParam) { //excel文件id String imageId = Util.null2String(importParam.getImageId()); @@ -353,10 +351,7 @@ public class VariableArchiveServiceImpl extends Service implements VariableArchi InputStream fileInputStream = null; try { fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(imageId)); - Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); - apidatas.put("headers", ExcelSupport.getSheetHeader(sheet, 0)); - apidatas.put("list", ExcelParseHelper.parse2List(sheet, 1, 0)); - return apidatas; + return ExcelParseHelper.preview(fileInputStream, 0, EXCEL_TYPE_XLSX); } finally { IOUtils.closeQuietly(fileInputStream); } @@ -377,10 +372,13 @@ public class VariableArchiveServiceImpl extends Service implements VariableArchi InputStream fileInputStream = null; try { fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(imageId)); - Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); + Workbook workbook = ExcelSupport.parseFile(fileInputStream, EXCEL_TYPE_XLSX); + Sheet sheet = workbook.getSheetAt(0); + List headers = ExcelSupport.getSheetHeader(sheet, 0); + int total = 0; //excel数据 - List> data = ExcelParseHelper.parse2Map(sheet, 1); + List> data = ExcelParseHelper.parse2Map(workbook, 0, 1); if (data != null) { total += data.size(); } @@ -391,7 +389,6 @@ public class VariableArchiveServiceImpl extends Service implements VariableArchi // 用于(初始化导入)的相同employeeId时的处理 List initImportData = Lists.newArrayList(); - List headers = ExcelSupport.getSheetHeader(sheet, 0); // 错误提示 List> excelComments = new ArrayList<>(); @@ -585,7 +582,7 @@ public class VariableArchiveServiceImpl extends Service implements VariableArchi VariableArchiveQueryParam queryParam = VariableArchiveQueryParam.builder() .employeeIds(employeeIds) .salaryMonth(SalaryDateUtil.getFormatYearMonth(salaryMonth)) - .salaryMonthDate(SalaryDateUtil.toDate(salaryMonth,1)) + .salaryMonthDate(SalaryDateUtil.toDate(salaryMonth, 1)) .taxAgentIds(Collections.singletonList(taxAgentId)) .build(); List variableArchiveListDTO = list(queryParam); diff --git a/src/com/engine/salary/web/VariableArchiveController.java b/src/com/engine/salary/web/VariableArchiveController.java index 217ba9699..a3a82f733 100644 --- a/src/com/engine/salary/web/VariableArchiveController.java +++ b/src/com/engine/salary/web/VariableArchiveController.java @@ -7,6 +7,7 @@ import com.engine.salary.entity.datacollection.param.VariableArchiveQueryParam; import com.engine.salary.entity.datacollection.param.VariableArchiveSaveParam; import com.engine.salary.util.ResponseResult; import com.engine.salary.util.SalaryDateUtil; +import com.engine.salary.util.excel.ExcelPreviewDTO; import com.engine.salary.wrapper.VariableArchiveWrapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; import lombok.extern.slf4j.Slf4j; @@ -219,7 +220,7 @@ public class VariableArchiveController { @Produces(MediaType.APPLICATION_JSON) public String preview(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody VariableArchiveImportHandleParam importParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>(user).run(getVariableArchiveWrapper(user)::preview, importParam); + return new ResponseResult(user).run(getVariableArchiveWrapper(user)::preview, importParam); } @POST diff --git a/src/com/engine/salary/wrapper/VariableArchiveWrapper.java b/src/com/engine/salary/wrapper/VariableArchiveWrapper.java index 5a3108980..22f4618bf 100644 --- a/src/com/engine/salary/wrapper/VariableArchiveWrapper.java +++ b/src/com/engine/salary/wrapper/VariableArchiveWrapper.java @@ -16,6 +16,7 @@ import com.engine.salary.service.VariableArchiveService; import com.engine.salary.service.VariableItemService; import com.engine.salary.service.impl.VariableArchiveServiceImpl; import com.engine.salary.service.impl.VariableItemServiceImpl; +import com.engine.salary.util.excel.ExcelPreviewDTO; import com.engine.salary.util.page.PageInfo; import lombok.extern.slf4j.Slf4j; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -107,7 +108,7 @@ public class VariableArchiveWrapper extends Service { return getVariableArchiveService(user).downloadTemplate(param); } - public Map preview(VariableArchiveImportHandleParam importParam) { + public ExcelPreviewDTO preview(VariableArchiveImportHandleParam importParam) { return getVariableArchiveService(user).preview(importParam); } From 4b30292c6c17337017e1bf4c5fd0ddffe740a962 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 16 Aug 2024 14:07:16 +0800 Subject: [PATCH 048/124] =?UTF-8?q?=E6=94=AF=E6=8C=81Vlookup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/util/excel/ExcelParseHelper.java | 58 ++++++++++++++----- 1 file changed, 42 insertions(+), 16 deletions(-) diff --git a/src/com/engine/salary/util/excel/ExcelParseHelper.java b/src/com/engine/salary/util/excel/ExcelParseHelper.java index 0e9e0364b..c19bb7b8a 100644 --- a/src/com/engine/salary/util/excel/ExcelParseHelper.java +++ b/src/com/engine/salary/util/excel/ExcelParseHelper.java @@ -90,7 +90,7 @@ public class ExcelParseHelper { for (; rowIndex < rowCount; rowIndex++) { List cellResult = new ArrayList(); for (int j = 0; j < cellCount; j++) { - cellResult.add(ExcelSupport.getCellValue(sheet,null, rowIndex, j)); + cellResult.add(ExcelSupport.getCellValue(sheet, null, rowIndex, j)); } result.add(cellResult); } @@ -120,7 +120,7 @@ public class ExcelParseHelper { for (; rowIndex < rowCount; rowIndex++) { List cellResult = new ArrayList(); for (int j = 0; j < cellCount; j++) { - cellResult.add(ExcelSupport.getCellValue(sheet,evaluator, rowIndex, j)); + cellResult.add(ExcelSupport.getCellValue(sheet, evaluator, rowIndex, j)); } result.add(cellResult); } @@ -137,7 +137,10 @@ public class ExcelParseHelper { * @return */ public static List> parse2Map(InputStream file, int sheetIndex, int rowIndex) { - Sheet sheet = ExcelSupport.parseFile(file, sheetIndex, EXCEL_TYPE_XLSX); + Workbook workbook = ExcelSupport.parseFile(file, EXCEL_TYPE_XLSX); + // 创建一个公式求值器对象 + FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); + Sheet sheet = workbook.getSheetAt(sheetIndex); int rowCount = sheet.getPhysicalNumberOfRows(); // 总行数 int cellCount = sheet.getRow(PARSE_EXCEL_ROW_VALID_CELL_INDEX).getPhysicalNumberOfCells(); // 总列数 @@ -148,7 +151,7 @@ public class ExcelParseHelper { Map cellResult = new HashMap<>(); for (int j = 0; j < cellCount; j++) { String key = sheetHeader.get(j); - cellResult.put(key, ExcelSupport.getCellValue(sheet,null, rowIndex, j)); + cellResult.put(key, ExcelSupport.getCellValue(sheet, evaluator, rowIndex, j)); } result.add(cellResult); } @@ -173,7 +176,28 @@ public class ExcelParseHelper { Map cellResult = new HashMap<>(); for (int j = 0; j < cellCount; j++) { String key = sheetHeader.get(j); - cellResult.put(key, ExcelSupport.getCellValue(sheet, null,rowIndex, j)); + cellResult.put(key, ExcelSupport.getCellValue(sheet, null, rowIndex, j)); + } + result.add(cellResult); + } + return result; + } + + public static List> parse2Map(Workbook workbook, int sheetIndex, int rowIndex) { + // 创建一个公式求值器对象 + FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); + Sheet sheet = workbook.getSheetAt(sheetIndex); + int rowCount = sheet.getPhysicalNumberOfRows(); // 总行数 + int cellCount = sheet.getRow(PARSE_EXCEL_ROW_VALID_CELL_INDEX).getPhysicalNumberOfCells(); // 总列数 + + List sheetHeader = ExcelSupport.getSheetHeader(sheet, PARSE_EXCEL_ROW_VALID_CELL_INDEX); + + List> result = new ArrayList<>(); + for (; rowIndex < rowCount; rowIndex++) { + Map cellResult = new HashMap<>(); + for (int j = 0; j < cellCount; j++) { + String key = sheetHeader.get(j); + cellResult.put(key, ExcelSupport.getCellValue(sheet, evaluator, rowIndex, j)); } result.add(cellResult); } @@ -183,7 +207,7 @@ public class ExcelParseHelper { /** * 将sheet数据转为map * - * @param rowIndex 从哪行开始解析 + * @param rowIndex 从哪行开始解析 * @param headerRowIndex 抽取列数的参考行 * @return */ @@ -198,7 +222,7 @@ public class ExcelParseHelper { Map cellResult = new HashMap<>(); for (int j = 0; j < cellCount; j++) { String key = sheetHeader.get(j); - cellResult.put(key, ExcelSupport.getCellValue(sheet, null,rowIndex, j)); + cellResult.put(key, ExcelSupport.getCellValue(sheet, null, rowIndex, j)); } result.add(cellResult); } @@ -219,7 +243,7 @@ public class ExcelParseHelper { for (; rowIndex < rowCount; rowIndex++) { List cellResult = new ArrayList(); for (int j = 0; j < cellCount; j++) { - cellResult.add(ExcelSupport.getCellValue(sheet,null, rowIndex, j)); + cellResult.add(ExcelSupport.getCellValue(sheet, null, rowIndex, j)); } result.add(cellResult); } @@ -228,7 +252,8 @@ public class ExcelParseHelper { /** * 将sheet数据转为List - * @param rowIndex 从哪行开始解析 + * + * @param rowIndex 从哪行开始解析 * @param headerRowIndex 抽取列数的参考行 * @return */ @@ -240,7 +265,7 @@ public class ExcelParseHelper { for (; rowIndex < rowCount; rowIndex++) { List cellResult = new ArrayList(); for (int j = 0; j < cellCount; j++) { - cellResult.add(ExcelSupport.getCellValue(sheet,null, rowIndex, j)); + cellResult.add(ExcelSupport.getCellValue(sheet, null, rowIndex, j)); } result.add(cellResult); } @@ -249,11 +274,12 @@ public class ExcelParseHelper { /** * 将sheet数据转为List - * @param rowIndex 从哪行开始解析 + * + * @param rowIndex 从哪行开始解析 * @param headerRowIndex 抽取列数的参考行 * @return */ - public static List> parse2List(Sheet sheet, FormulaEvaluator evaluator ,int rowIndex, int headerRowIndex) { + public static List> parse2List(Sheet sheet, FormulaEvaluator evaluator, int rowIndex, int headerRowIndex) { int rowCount = sheet.getPhysicalNumberOfRows(); // 总行数 int cellCount = sheet.getRow(headerRowIndex).getPhysicalNumberOfCells(); // 总列数 @@ -261,7 +287,7 @@ public class ExcelParseHelper { for (; rowIndex < rowCount; rowIndex++) { List cellResult = new ArrayList(); for (int j = 0; j < cellCount; j++) { - cellResult.add(ExcelSupport.getCellValue(sheet,evaluator, rowIndex, j)); + cellResult.add(ExcelSupport.getCellValue(sheet, evaluator, rowIndex, j)); } result.add(cellResult); } @@ -343,8 +369,8 @@ public class ExcelParseHelper { // 创建一个公式求值器对象 FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); Sheet sheet = workbook.getSheetAt(i); - return ExcelPreviewDTO.builder() - .headers(ExcelSupport.getSheetHeader(sheet, 0)) - .list(ExcelParseHelper.parse2List(sheet, evaluator ,1, 0)).build(); + return ExcelPreviewDTO.builder() + .headers(ExcelSupport.getSheetHeader(sheet, 0)) + .list(ExcelParseHelper.parse2List(sheet, evaluator, 1, 0)).build(); } } From 4b9341cc987be95c3a25a9fa68d476755a31e930 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 16 Aug 2024 14:13:59 +0800 Subject: [PATCH 049/124] =?UTF-8?q?=E6=94=AF=E6=8C=81Vlookup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/util/excel/ExcelSupport.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/util/excel/ExcelSupport.java b/src/com/engine/salary/util/excel/ExcelSupport.java index 8ba0aa7f6..7ec79c30b 100644 --- a/src/com/engine/salary/util/excel/ExcelSupport.java +++ b/src/com/engine/salary/util/excel/ExcelSupport.java @@ -156,7 +156,7 @@ public class ExcelSupport { // 计算公式的值 evaluator.evaluateFormulaCell(cell); // 获取公式计算后的值 - cellValue = cell.getNumericCellValue() + ""; + cellValue = cell.getStringCellValue(); } else { cellValue = String.valueOf(cell.getCellFormula()); } From 22c99e081d7585db464d299241242b9d256e2d61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 16 Aug 2024 14:39:01 +0800 Subject: [PATCH 050/124] =?UTF-8?q?=E6=94=AF=E6=8C=81Vlookup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/util/excel/ExcelSupport.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/com/engine/salary/util/excel/ExcelSupport.java b/src/com/engine/salary/util/excel/ExcelSupport.java index 7ec79c30b..212905a93 100644 --- a/src/com/engine/salary/util/excel/ExcelSupport.java +++ b/src/com/engine/salary/util/excel/ExcelSupport.java @@ -101,12 +101,12 @@ public class ExcelSupport { * @return */ public static List getSheetHeader(Sheet sheet, int headerIndex) { - List headers = new ArrayList<>(); + List headers = new ArrayList<>(); Row headerRow = sheet.getRow(headerIndex); Iterator cellIterator = headerRow.cellIterator(); while (cellIterator.hasNext()) { Cell cell = (Cell) cellIterator.next(); - java.lang.String stringCellValue = cell.getStringCellValue(); + String stringCellValue = cell.getStringCellValue(); headers.add(stringCellValue); } return headers; @@ -140,8 +140,6 @@ public class ExcelSupport { if (DateUtil.isCellDateFormatted(cell)) { cellValue = getDateStr(cell.getDateCellValue(), pattern); } else { -// cell.setCellType(STRING); -// cellValue = cell.getStringCellValue(); cellValue = decimalFormat.format(cell.getNumericCellValue()); } break; @@ -154,9 +152,10 @@ public class ExcelSupport { case FORMULA: // 公式类型 if (evaluator != null) { // 计算公式的值 - evaluator.evaluateFormulaCell(cell); + CellType cellType = evaluator.evaluateFormulaCell(cell); // 获取公式计算后的值 - cellValue = cell.getStringCellValue(); + cell.setCellType(cellType); + cellValue =getCellValue(cell, evaluator); } else { cellValue = String.valueOf(cell.getCellFormula()); } From cd8d4601afd8dba420faef051da77205a306bfd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 19 Aug 2024 09:49:49 +0800 Subject: [PATCH 051/124] =?UTF-8?q?=E5=85=A8=E9=87=8F=E8=BF=81=E7=A7=BB?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryArchiveItemServiceImpl.java | 61 +++++++++++-------- .../service/impl/SalaryItemServiceImpl.java | 9 ++- .../impl/SalarySysConfServiceImpl.java | 21 ++++--- 3 files changed, 56 insertions(+), 35 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java index 1c28ed5b2..01b94c051 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java @@ -37,6 +37,7 @@ import com.engine.salary.util.excel.ExcelUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.valid.ValidUtil; import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -55,6 +56,7 @@ import java.util.stream.Collectors; * @author qiantao * @version 1.0 **/ +@Slf4j public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchiveItemService { private SalaryArchiveBiz salaryArchiveMapper = new SalaryArchiveBiz(); @@ -94,6 +96,7 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi private SalaryEmployeeService getSalaryEmployeeService(User user) { return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } + /** * 获取未生效 lt * @@ -281,13 +284,12 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi salaryArchiveItem, saiNew, user - ); + ); } return StringUtils.EMPTY; } - /** * @return null * @description 构建薪资档案中调薪的更新PO @@ -765,34 +767,41 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi List salaryItemPOList = getSalaryItemService(user).listAll(); Map nameMap = SalaryEntityUtil.convert2Map(salaryItemPOList, SalaryItemPO::getName); Map codeMap = SalaryEntityUtil.convert2Map(salaryItemPOList, SalaryItemPO::getCode); - Optional.ofNullable(config .getSalaryItems()) + Optional.ofNullable(config.getSalaryItems()) .orElse(new ArrayList<>()) .forEach(itemPO -> { - if (nameMap.containsKey(itemPO.getName())) { - SalaryItemPO salaryItemPO = nameMap.get(itemPO.getName()); - if (!StrUtil.equals(salaryItemPO.getCode(), itemPO.getCode())) { - result.getWarning().add(String.format("警告,档案字段[%s]名称已存在,但项目code不一致,迁入code:%s,当前系统code:%s", itemPO.getName(), itemPO.getCode(), salaryItemPO.getCode())); + try { + + + if (nameMap.containsKey(itemPO.getName())) { + SalaryItemPO salaryItemPO = nameMap.get(itemPO.getName()); + if (!StrUtil.equals(salaryItemPO.getCode(), itemPO.getCode())) { + result.getWarning().add(String.format("警告,档案字段[%s]名称已存在,但项目code不一致,迁入code:%s,当前系统code:%s", itemPO.getName(), itemPO.getCode(), salaryItemPO.getCode())); + } + itemPO.setId(salaryItemPO.getId()); + //不许修改code + itemPO.setCode(null); + itemPO.setCreator(uid); + getSalaryItemMapper().updateIgnoreNull(itemPO); + } else if (codeMap.containsKey(itemPO.getCode())) { + SalaryItemPO salaryItemPO = codeMap.get(itemPO.getCode()); + if (!StrUtil.equals(salaryItemPO.getName(), itemPO.getName())) { + result.getWarning().add(String.format("警告,档案字段[%s]code已存在,但项目code不一致,迁入名称:%s,当前系统名称:%s", itemPO.getName(), itemPO.getName(), salaryItemPO.getName())); + } + itemPO.setId(salaryItemPO.getId()); + //不许修改名字 + itemPO.setName(null); + itemPO.setCreator(uid); + getSalaryItemMapper().updateIgnoreNull(itemPO); + } else { + itemPO.setId(IdGenerator.generate()); + getSalaryItemMapper().insertIgnoreNull(itemPO); } - itemPO.setId(salaryItemPO.getId()); - //不许修改code - itemPO.setCode(null); - itemPO.setCreator(uid); - getSalaryItemMapper().updateIgnoreNull(itemPO); - } else if (codeMap.containsKey(itemPO.getCode())) { - SalaryItemPO salaryItemPO = codeMap.get(itemPO.getCode()); - if (!StrUtil.equals(salaryItemPO.getName(), itemPO.getName())) { - result.getWarning().add(String.format("警告,档案字段[%s]code已存在,但项目code不一致,迁入名称:%s,当前系统名称:%s", itemPO.getName(), itemPO.getName(), salaryItemPO.getName())); - } - itemPO.setId(salaryItemPO.getId()); - //不许修改名字 - itemPO.setName(null); - itemPO.setCreator(uid); - getSalaryItemMapper().updateIgnoreNull(itemPO); - } else { - itemPO.setId(IdGenerator.generate()); - getSalaryItemMapper().insertIgnoreNull(itemPO); + result.getSuccess().add(String.format("成功,薪资项目[%s]加载成功", itemPO.getName())); + } catch (Exception e) { + log.error("{}字段加载异常,", itemPO.getName(), e); + result.getError().add(String.format("错误,档案字段[%s]加载异常,%s", itemPO.getName(), e.getMessage())); } - result.getSuccess().add(String.format("成功,薪资项目[%s]加载成功", itemPO.getName())); }); return result; diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index 4b10460ab..2fe2faa6b 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -49,6 +49,7 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.Sheet; @@ -72,6 +73,7 @@ import static com.engine.salary.util.excel.ExcelSupport.EXCEL_TYPE_XLSX; * @author qiantao * @version 1.0 **/ +@Slf4j public class SalaryItemServiceImpl extends Service implements SalaryItemService { private SalaryItemBiz salaryItemBiz = new SalaryItemBiz(); @@ -814,7 +816,12 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService Optional.ofNullable(salaryItemConfig.getSalaryItems()) .orElse(new ArrayList<>()) .forEach(itemPO -> { - add(itemPO, nameMap, codeMap, result); + try { + add(itemPO, nameMap, codeMap, result); + } catch (Exception e) { + log.error("{}项目加载异常,", itemPO.getName(), e); + result.getError().add(String.format("错误,薪资项目[%s]加载异常,%s", itemPO.getName(), e.getMessage())); + } }); return result; } diff --git a/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java b/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java index bcd6aa3cc..956e6f7cd 100644 --- a/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java +++ b/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java @@ -536,15 +536,20 @@ public class SalarySysConfServiceImpl extends Service implements SalarySysConfSe if (CollectionUtil.isNotEmpty((salarySysConfs))) { salarySysConfs.forEach(po -> { - SalarySysConfPO sysConfPO = getSalarySysConfMapper().getOneByCode(po.getConfKey()); - if (sysConfPO == null) { - po.setId(IdGenerator.generate()); - getSalarySysConfMapper().insertIgnoreNull(po); - } else { - sysConfPO.setConfValue(po.getConfValue()); - getSalarySysConfMapper().updateIgnoreNull(sysConfPO); + try { + SalarySysConfPO sysConfPO = getSalarySysConfMapper().getOneByCode(po.getConfKey()); + if (sysConfPO == null) { + po.setId(IdGenerator.generate()); + getSalarySysConfMapper().insertIgnoreNull(po); + } else { + sysConfPO.setConfValue(po.getConfValue()); + getSalarySysConfMapper().updateIgnoreNull(sysConfPO); + } + result.getSuccess().add(String.format("[%s]配置,key:[%s],value:[%s]", po.getTitle(), po.getConfKey(), po.getConfValue())); + } catch (Exception e) { + log.error(String.format("错误,[%s]配置加载异常,key:[%s],value:[%s]", po.getTitle(), po.getConfKey(), po.getConfValue()), e); + result.getError().add(String.format("错误,[%s]配置加载异常,key:[%s],value:[%s],原因:%s", po.getTitle(), po.getConfKey(), po.getConfValue(), e.getMessage())); } - result.getSuccess().add(String.format("[%s]配置,key:[%s],value:[%s]", po.getTitle(), po.getConfKey(), po.getConfValue())); }); } From 26d300299b901b46f31a2b497caf86cb0b86131c Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 19 Aug 2024 12:07:03 +0800 Subject: [PATCH 052/124] =?UTF-8?q?=E7=A4=BE=E4=BF=9D=E6=96=B9=E6=A1=88?= =?UTF-8?q?=E4=B8=8A=E4=B8=8B=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../param/InsuranceSchemeReqParam.java | 10 + .../mapper/siarchives/FundSchemeMapper.java | 2 + .../mapper/siarchives/FundSchemeMapper.xml | 16 ++ .../mapper/siarchives/OtherSchemeMapper.java | 2 + .../mapper/siarchives/OtherSchemeMapper.xml | 16 ++ .../mapper/siarchives/SocialSchemeMapper.java | 2 + .../mapper/siarchives/SocialSchemeMapper.xml | 16 ++ .../salary/service/SISchemeService.java | 2 +- .../service/impl/SISchemeServiceImpl.java | 236 +++++++++++++++++- .../engine/salary/web/SISchemeController.java | 2 +- 10 files changed, 296 insertions(+), 8 deletions(-) diff --git a/src/com/engine/salary/entity/sischeme/param/InsuranceSchemeReqParam.java b/src/com/engine/salary/entity/sischeme/param/InsuranceSchemeReqParam.java index ff8e9398c..c9ed91a55 100644 --- a/src/com/engine/salary/entity/sischeme/param/InsuranceSchemeReqParam.java +++ b/src/com/engine/salary/entity/sischeme/param/InsuranceSchemeReqParam.java @@ -41,4 +41,14 @@ public class InsuranceSchemeReqParam { private WelfareTypeEnum welfareTypeEnum; private List ids; + + /** + * 是否修改档案数据为上限或下限 + */ + private Boolean changeData; + + /** + * 校验是否有档案不满足上下限 + */ + private Boolean validate; } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.java b/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.java index d6368f8b4..c7dfa1233 100644 --- a/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.java +++ b/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.java @@ -106,4 +106,6 @@ public interface FundSchemeMapper { * @param endTime */ void updateEndTime(@Param("id")Long id, @Param("endTime")String endTime); + + List listBySchemeId(@Param("fundSchemeId")Long id, @Param("runStatuses")List runStatus); } diff --git a/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml b/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml index 750d36814..d6089636a 100644 --- a/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml +++ b/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml @@ -275,6 +275,22 @@ WHERE delete_type = 0 + + update hrsa_fund_archives diff --git a/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.java b/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.java index 6ad9fbe78..fff3bbd3b 100644 --- a/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.java +++ b/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.java @@ -105,4 +105,6 @@ public interface OtherSchemeMapper { * @param endTime */ void updateEndTime(@Param("id")Long id, @Param("endTime")String endTime); + + List listBySchemeId(@Param("schemeId") Long schemeId, @Param("runStatuses") List runStatuses); } diff --git a/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.xml b/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.xml index 7885d7358..2a55be2f2 100644 --- a/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.xml +++ b/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.xml @@ -258,6 +258,22 @@ WHERE delete_type = 0 + + update hrsa_other_archives diff --git a/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.java b/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.java index 6e3e97982..246cb5c78 100644 --- a/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.java +++ b/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.java @@ -136,4 +136,6 @@ public interface SocialSchemeMapper { * @param endTime */ void updateEndTime(@Param("id")Long id, @Param("endTime")String endTime); + + List listBySchemeId(@Param("schemeId")Long schemeId, @Param("runStatuses")List runStatus); } diff --git a/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.xml b/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.xml index 1dba6c07f..9041bde36 100644 --- a/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.xml +++ b/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.xml @@ -919,6 +919,22 @@ WHERE delete_type = 0 + + update hrsa_social_archives diff --git a/src/com/engine/salary/service/SISchemeService.java b/src/com/engine/salary/service/SISchemeService.java index e465d2740..86eb024ee 100644 --- a/src/com/engine/salary/service/SISchemeService.java +++ b/src/com/engine/salary/service/SISchemeService.java @@ -27,7 +27,7 @@ public interface SISchemeService { Map insertScheme(Map params); - Map update(Map params); + String update(Map params); Map delete(Map params); diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index d63bdcd24..349c2fee0 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -7,10 +7,10 @@ import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.component.SalaryWeaTable; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; -import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.siarchives.param.InsuranceArchivesListParam; @@ -84,6 +84,7 @@ import java.io.InputStream; import java.math.BigDecimal; import java.util.*; import java.util.function.Function; +import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -211,13 +212,12 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { } @Override - public Map update(Map params) { + public String update(Map params) { // return commandExecutor.execute(new SISchemeUpdateCmd(params, user)); Map apidatas = new HashMap(16); InsuranceSchemeReqParam insuranceSchemeReqParam = (InsuranceSchemeReqParam) params.get("insuranceSchemeReqParam"); // siSchemeBiz.update(insuranceSchemeReqParam, (long) user.getUID()); - update(insuranceSchemeReqParam, (long) user.getUID()); - return apidatas; + return update(insuranceSchemeReqParam, (long) user.getUID()); } @Override @@ -2484,7 +2484,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { * @param updateParam * @param employeeId */ - public void update(InsuranceSchemeReqParam updateParam, long employeeId) { + public String update(InsuranceSchemeReqParam updateParam, long employeeId) { //查询是否存在福利方案 InsuranceSchemePO insuranceSchemePO = getById(updateParam.getInsuranceScheme().getId()); if (Objects.isNull(insuranceSchemePO)) { @@ -2521,12 +2521,29 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { //记录主表操作日志 loggerContext.setNewValues(insuranceSchemePO1); SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); + // 查询原本的福利明细信息 + List oldInsuranceSchemeDetails = getInsuranceSchemeDetailMapper().queryInsuranceSchemeDetailList(updateParam.getInsuranceScheme().getId(), IsPaymentEnum.YES.getValue()); + // 本次福利明细 + List insuranceSchemeDetailPOS = InsuranceSchemeBO.convertToInsuranceSchemeDetailPoList(updateParam.getInsuranceSchemeDetailList(), employeeId, insuranceSchemePO.getId()); + + StringBuilder baseLimitStrBuilder = new StringBuilder(); + if (updateParam.getValidate() || updateParam.getChangeData()) { + // 查询本次修改了哪些类型的上下限 + List schemeDetailChangeLimitList = getChanceLimitSchemeDetailList(oldInsuranceSchemeDetails, insuranceSchemeDetailPOS); + // 对于不满足上下限的基数进行自动调整 + autoAdjustBaseByLimit(updateParam, schemeDetailChangeLimitList, insuranceSchemePO, baseLimitStrBuilder); + if (updateParam.getValidate() && StringUtils.isNotBlank(baseLimitStrBuilder.toString())) { + // 是校验且存在校验不通过的档案,返回前端确认 + return baseLimitStrBuilder.toString(); + } + } + //更新福利方案明细表 先删后插 getInsuranceSchemeDetailMapper().batchDeleteByPrimaryIds(Collections.singleton(updateParam.getInsuranceScheme().getId())); //更新明细表 - List insuranceSchemeDetailPOS = InsuranceSchemeBO.convertToInsuranceSchemeDetailPoList(updateParam.getInsuranceSchemeDetailList(), employeeId, insuranceSchemePO.getId()); encryptUtil.encryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); insuranceSchemeDetailPOS.forEach(getInsuranceSchemeDetailMapper()::insert); + //记录明细表操作日志 encryptUtil.decryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); LoggerContext insuranceSchemeDetailContext = new LoggerContext<>(); @@ -2538,7 +2555,214 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { insuranceSchemeDetailContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利方案明细")); insuranceSchemeDetailPOS.forEach(insuranceSchemeDetailContext::setNewValues); SalaryElogConfig.siSchemeLoggerTemplate.write(insuranceSchemeDetailContext); + return "success"; + } + /** + * 对于不满足上下限的基数进行自动调整 + * @param schemeDetailChangeLimitList + * @param insuranceSchemePO + */ + private void autoAdjustBaseByLimit(InsuranceSchemeReqParam updateParam, List schemeDetailChangeLimitList, InsuranceSchemePO insuranceSchemePO, StringBuilder baseLimitStrBuilder) { + Map> insuranceSchemeDetailMap = SalaryEntityUtil.group2Map(schemeDetailChangeLimitList, InsuranceSchemeDetailPO::getPaymentScope); + List personChangeDeatilList = insuranceSchemeDetailMap.getOrDefault(PaymentScopeEnum.SCOPE_PERSON.getValue(), Collections.emptyList()); + List companyChangeDetailList = insuranceSchemeDetailMap.getOrDefault(PaymentScopeEnum.SCOPE_COMPANY.getValue(), Collections.emptyList()); + List runStatus = Arrays.asList(EmployeeStatusEnum.STAY_DEL.getValue(), EmployeeStatusEnum.PAYING.getValue(), EmployeeStatusEnum.STAY_DEL.getValue()); + // 获取该方案下的社保福利档案 + Integer welfareType = insuranceSchemePO.getWelfareType(); + if (welfareType.equals(WelfareTypeEnum.SOCIAL_SECURITY.getValue())) { + List needUpdateSocialArchiveList = new ArrayList<>(); + List insuranceArchivesSocialSchemePOS = getSocialSchemeMapper().listBySchemeId(insuranceSchemePO.getId(), runStatus); + encryptUtil.decryptList(insuranceArchivesSocialSchemePOS, InsuranceArchivesSocialSchemePO.class); + // 获取人员信息 + List empIds = insuranceArchivesSocialSchemePOS.stream().map(InsuranceArchivesSocialSchemePO::getEmployeeId).collect(Collectors.toList()); + List employeeList = getSalaryEmployeeService(user).listByIds(empIds); + Map employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); + // 社保 + insuranceArchivesSocialSchemePOS.forEach(archive -> { + Boolean[] changeFlag = {false}; + // 个人调整 + String socialPaymentBaseString = archive.getSocialPaymentBaseString(); + if (CollectionUtils.isNotEmpty(personChangeDeatilList)) { + socialPaymentBaseString = adaptWelBaseLimit(socialPaymentBaseString, personChangeDeatilList, changeFlag); + } + // 公司调整 + String socialPaymentComBaseString = archive.getSocialPaymentComBaseString(); + if (CollectionUtils.isNotEmpty(companyChangeDetailList)) { + socialPaymentComBaseString = adaptWelBaseLimit(socialPaymentComBaseString, companyChangeDetailList, changeFlag); + } + if (changeFlag[0]) { + DataCollectionEmployee employee = employeeMap.get(archive.getEmployeeId()); + baseLimitStrBuilder.append(employee == null ? archive.getEmployeeId() : employee.getUsername() + "\n"); + archive.setSocialPaymentBaseString(socialPaymentBaseString); + archive.setSocialPaymentComBaseString(socialPaymentComBaseString); + needUpdateSocialArchiveList.add(archive); + if (updateParam.getChangeData() && CollectionUtils.isNotEmpty(needUpdateSocialArchiveList)) { + // 更新 + encryptUtil.encrypt(archive, InsuranceArchivesSocialSchemePO.class); + getSocialSchemeMapper().updateById(archive); + } + } + }); + } else if (welfareType.equals(WelfareTypeEnum.ACCUMULATION_FUND.getValue())) { + List needUpdateFundArchiveList = new ArrayList<>(); + List insuranceArchivesFundSchemePOS = getFundSchemeMapper().listBySchemeId(insuranceSchemePO.getId(), runStatus); + encryptUtil.decryptList(insuranceArchivesFundSchemePOS, InsuranceArchivesFundSchemePO.class); + // 获取人员信息 + List empIds = insuranceArchivesFundSchemePOS.stream().map(InsuranceArchivesFundSchemePO::getEmployeeId).collect(Collectors.toList()); + List employeeList = getSalaryEmployeeService(user).listByIds(empIds); + Map employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); + // 公积金 + insuranceArchivesFundSchemePOS.forEach(archive -> { + Boolean[] changeFlag = {false}; + // 个人调整 + String fundPaymentBaseString = archive.getFundPaymentBaseString(); + if (CollectionUtils.isNotEmpty(personChangeDeatilList)) { + fundPaymentBaseString = adaptWelBaseLimit(fundPaymentBaseString, personChangeDeatilList, changeFlag); + } + // 公司调整 + String fundPaymentComBaseString = archive.getFundPaymentComBaseString(); + if (CollectionUtils.isNotEmpty(companyChangeDetailList)) { + fundPaymentComBaseString = adaptWelBaseLimit(fundPaymentComBaseString, companyChangeDetailList, changeFlag); + } + if (changeFlag[0]) { + DataCollectionEmployee employee = employeeMap.get(archive.getEmployeeId()); + baseLimitStrBuilder.append(employee == null ? archive.getEmployeeId() : employee.getUsername() + "\n"); + archive.setFundPaymentBaseString(fundPaymentBaseString); + archive.setFundPaymentComBaseString(fundPaymentComBaseString); + needUpdateFundArchiveList.add(archive); + if (updateParam.getChangeData() && CollectionUtils.isNotEmpty(needUpdateFundArchiveList)) { + // 更新 + encryptUtil.encrypt(archive, InsuranceArchivesFundSchemePO.class); + getFundSchemeMapper().updateById(archive); + } + } + }); + } else if (welfareType.equals(WelfareTypeEnum.OTHER.getValue())) { + List insuranceArchivesOtherSchemePOS = getOtherSchemeMapper().listBySchemeId(insuranceSchemePO.getId(), runStatus); + encryptUtil.decryptList(insuranceArchivesOtherSchemePOS, InsuranceArchivesOtherSchemePO.class); + List needUpdateOtherArchiveList = new ArrayList<>(); + // 获取人员信息 + List empIds = insuranceArchivesOtherSchemePOS.stream().map(InsuranceArchivesOtherSchemePO::getEmployeeId).collect(Collectors.toList()); + List employeeList = getSalaryEmployeeService(user).listByIds(empIds); + Map employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); + // 企业年金或其他福利 + insuranceArchivesOtherSchemePOS.forEach(archive -> { + Boolean[] changeFlag = {false}; + // 个人调整 + String otherPaymentBaseString = archive.getOtherPaymentBaseString(); + if (CollectionUtils.isNotEmpty(personChangeDeatilList)) { + otherPaymentBaseString = adaptWelBaseLimit(otherPaymentBaseString, personChangeDeatilList, changeFlag); + } + // 公司调整的 + String otherPaymentComBaseString = archive.getOtherPaymentComBaseString(); + if (CollectionUtils.isNotEmpty(companyChangeDetailList)) { + otherPaymentComBaseString = adaptWelBaseLimit(otherPaymentComBaseString, companyChangeDetailList, changeFlag); + } + if (changeFlag[0]) { + DataCollectionEmployee employee = employeeMap.get(archive.getEmployeeId()); + baseLimitStrBuilder.append(employee == null ? archive.getEmployeeId() : employee.getUsername() + "\n"); + archive.setOtherPaymentBaseString(otherPaymentBaseString); + archive.setOtherPaymentComBaseString(otherPaymentComBaseString); + needUpdateOtherArchiveList.add(archive); + if (updateParam.getChangeData() && CollectionUtils.isNotEmpty(needUpdateOtherArchiveList)) { + // 更新 + encryptUtil.encrypt(archive, InsuranceArchivesOtherSchemePO.class); + getOtherSchemeMapper().updateById(archive); + } + } + }); + } + } + + public String adaptWelBaseLimit(String paymentBaseString, List insuranceSchemeDetailPOList, Boolean[] changeFlag) { + + if (paymentBaseString == null) { + return null; + } + Map paymentBaseJson = JSON.parseObject(paymentBaseString, new HashMap().getClass()); + if (paymentBaseJson == null) { + return null; + } + Map insuranceSchemeDetailPOMap = SalaryEntityUtil.convert2Map(insuranceSchemeDetailPOList, InsuranceSchemeDetailPO::getInsuranceId); + List insuranceIdList = insuranceSchemeDetailPOList.stream().map(po -> po.getInsuranceId().toString()).collect(Collectors.toList()); + + for (Map.Entry entry : paymentBaseJson.entrySet()) { + + //判断福利值是否为空/数字 + if (entry.getValue() == null || entry.getValue().length() == 0) { + continue; + } else if (!isNumeric(entry.getValue())) { + log.info("福利值非数字!"); + continue; + // throw new SalaryRunTimeException("福利值非数字"); + } + + if (!insuranceIdList.contains(entry.getKey())) { + // 没有修改上下限 + continue; + } + InsuranceSchemeDetailPO insuranceSchemeDetailPO = insuranceSchemeDetailPOMap.get(Long.valueOf(entry.getKey())); + if (insuranceSchemeDetailPO != null) { + + encryptUtil.decrypt(insuranceSchemeDetailPO, InsuranceSchemeDetailPO.class); + String lowerLimit = "0.000".equals(insuranceSchemeDetailPO.getLowerLimit()) ? null : insuranceSchemeDetailPO.getLowerLimit(); + String upperLimit = "0.000".equals(insuranceSchemeDetailPO.getUpperLimit()) ? null : insuranceSchemeDetailPO.getUpperLimit(); + if (lowerLimit != null && lowerLimit.length() > 0 && Double.parseDouble(entry.getValue()) < Double.parseDouble(lowerLimit)) { + //数值低于对应福利明细下限 + entry.setValue(lowerLimit); + changeFlag[0] = true; + } + if (upperLimit != null && upperLimit.length() > 0 && Double.parseDouble(entry.getValue()) > Double.parseDouble(upperLimit)) { + //数值高于对应福利明细上限 + entry.setValue(upperLimit); + changeFlag[0] = true; + } + } + } + return JSON.toJSONString(paymentBaseJson); + } + + /** + * 判断字符串是否为整数或者小数或者负数 + */ + public static boolean isNumeric(String str){ + + Pattern pattern = Pattern.compile("^-?\\d+(\\.\\d+)?$"); + Matcher isNum = pattern.matcher(str); + if (!isNum.matches()) { + return false; + } + return true; + + } + + /** + * 获取修改了哪些明细项的上限和下限 + * @param oldInsuranceSchemeDetails + * @param newInsuranceSchemeDetails + * @return + */ + private List getChanceLimitSchemeDetailList(List oldInsuranceSchemeDetails, List newInsuranceSchemeDetails) { + List schemeDetailChangeLimitList = new ArrayList<>(); + // key: 福利项id-缴纳范围 + Map oldInsuranceSchemeDetailMap = SalaryEntityUtil.convert2Map(oldInsuranceSchemeDetails, d -> d.getInsuranceId() + "-" + d.getPaymentScope()); + newInsuranceSchemeDetails.stream() + .filter(detail -> detail.getIsPayment().equals(NumberUtils.INTEGER_ONE)) + .forEach(detail -> { + boolean changeFlag = false; + InsuranceSchemeDetailPO oldInsuranceSchemeDetailPO = oldInsuranceSchemeDetailMap.get(detail.getInsuranceId() + "-" + detail.getPaymentScope()); + if (!oldInsuranceSchemeDetailPO.getUpperLimit().equals(detail.getUpperLimit())) { + changeFlag = true; + } + if (!oldInsuranceSchemeDetailPO.getLowerLimit().equals(detail.getLowerLimit())) { + changeFlag = true; + } + if (changeFlag) { + schemeDetailChangeLimitList.add(detail); + } + }); + return schemeDetailChangeLimitList; } public int checkBeforeDeleteSocialscheme(Map params) { diff --git a/src/com/engine/salary/web/SISchemeController.java b/src/com/engine/salary/web/SISchemeController.java index bcf226914..89772a896 100644 --- a/src/com/engine/salary/web/SISchemeController.java +++ b/src/com/engine/salary/web/SISchemeController.java @@ -133,7 +133,7 @@ public class SISchemeController { User user = HrmUserVarify.getUser(request, response); Map map = ParamUtil.request2Map(request); map.put("insuranceSchemeReqParam", insuranceSchemeReqParam); - return new ResponseResult, Map>(user).run(getService(user)::update, map); + return new ResponseResult,String>(user).run(getService(user)::update, map); } /** From 984e544503f943b5139dc4978b7b1ee803179bb7 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 19 Aug 2024 16:27:56 +0800 Subject: [PATCH 053/124] =?UTF-8?q?=E7=A4=BE=E4=BF=9D=E6=96=B9=E6=A1=88?= =?UTF-8?q?=E4=B8=8A=E4=B8=8B=E9=99=90=E8=87=AA=E5=8A=A8=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E5=9F=BA=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SISchemeServiceImpl.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index 349c2fee0..b2c68d3a1 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -2752,11 +2752,15 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { .forEach(detail -> { boolean changeFlag = false; InsuranceSchemeDetailPO oldInsuranceSchemeDetailPO = oldInsuranceSchemeDetailMap.get(detail.getInsuranceId() + "-" + detail.getPaymentScope()); - if (!oldInsuranceSchemeDetailPO.getUpperLimit().equals(detail.getUpperLimit())) { - changeFlag = true; - } - if (!oldInsuranceSchemeDetailPO.getLowerLimit().equals(detail.getLowerLimit())) { + if (oldInsuranceSchemeDetailPO == null) { changeFlag = true; + } else { + if (!oldInsuranceSchemeDetailPO.getUpperLimit().equals(detail.getUpperLimit())) { + changeFlag = true; + } + if (!oldInsuranceSchemeDetailPO.getLowerLimit().equals(detail.getLowerLimit())) { + changeFlag = true; + } } if (changeFlag) { schemeDetailChangeLimitList.add(detail); From 9121268815c393b1b5eaecb83a5788c012274606 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 20 Aug 2024 09:29:14 +0800 Subject: [PATCH 054/124] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=87=8D=E6=96=B0?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E8=B4=A6=E5=A5=97bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/impl/SalarySobServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java index e97956523..f1ff59e93 100644 --- a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java @@ -863,6 +863,7 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { SalarySobPO oldSob = sobPOMap.get(sobPOName); salarySobPO.setId(oldSob.getId()); salarySobPO.setCreator(uid); + salarySobPO.setTaxAgentId(oldSob.getTaxAgentId()); getSalarySobMapper().updateIgnoreNull(salarySobPO); } else { salarySobPO.setCreator(uid); From 2a58b4972b3ff2c5e1aca63a0b011f40dc89e83a Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 20 Aug 2024 13:48:31 +0800 Subject: [PATCH 055/124] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E6=94=AF=E6=8C=81vlookup=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/SalaryAcctExcelService.java | 3 ++- .../impl/SalaryAcctExcelServiceImpl.java | 22 ++++++++++++------- .../salary/util/excel/ExcelParseHelper.java | 21 ++++++++++++++++++ .../salary/web/SalaryAcctController.java | 3 ++- 4 files changed, 39 insertions(+), 10 deletions(-) diff --git a/src/com/engine/salary/service/SalaryAcctExcelService.java b/src/com/engine/salary/service/SalaryAcctExcelService.java index b86ef0da0..44aed9df9 100644 --- a/src/com/engine/salary/service/SalaryAcctExcelService.java +++ b/src/com/engine/salary/service/SalaryAcctExcelService.java @@ -4,6 +4,7 @@ import com.engine.salary.component.WeaTableColumnGroup; import com.engine.salary.entity.salaryacct.dto.SalaryAcctImportFieldDTO; import com.engine.salary.entity.salaryacct.param.*; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; +import com.engine.salary.util.excel.ExcelPreviewDTO; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.util.List; @@ -113,7 +114,7 @@ public interface SalaryAcctExcelService { Map preview(SalaryAcctImportParam param); - Map previewImportSalaryAcctResult(SalaryAcctImportParam param); + ExcelPreviewDTO previewImportSalaryAcctResult(SalaryAcctImportParam param); void cacheImportField(List salaryItems); diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 7f2e440e1..01aee1e36 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -47,6 +47,7 @@ import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.*; import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.excel.ExcelParseHelper; +import com.engine.salary.util.excel.ExcelPreviewDTO; import com.engine.salary.util.excel.ExcelSupport; import com.engine.salary.util.excel.ExcelUtilPlus; import com.engine.salary.util.page.PageInfo; @@ -63,7 +64,9 @@ import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; +import org.apache.poi.ss.usermodel.FormulaEvaluator; import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.BeanUtils; @@ -985,7 +988,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc } @Override - public Map previewImportSalaryAcctResult(SalaryAcctImportParam param) { + public ExcelPreviewDTO previewImportSalaryAcctResult(SalaryAcctImportParam param) { //1、参数校验 ValidUtil.doValidator(param); @@ -995,11 +998,13 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc InputStream fileInputStream = null; try { fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); - Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); - map.put("headers", ExcelSupport.getSheetHeader(sheet, 1)); - map.put("list", ExcelParseHelper.parse2List(sheet, 2, 1)); - return map; - + Workbook workbook = ExcelSupport.parseFile(fileInputStream, EXCEL_TYPE_XLSX); + // 创建一个公式求值器对象 + FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); + Sheet sheet = workbook.getSheetAt(0); + return ExcelPreviewDTO.builder() + .headers(ExcelSupport.getSheetHeader(sheet, 1)) + .list(ExcelParseHelper.parse2List(sheet, evaluator, 2, 1)).build(); } finally { IOUtils.closeQuietly(fileInputStream); } @@ -1074,7 +1079,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); - Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); + Workbook workbook = ExcelSupport.parseFile(fileInputStream, EXCEL_TYPE_XLSX); + Sheet sheet = workbook.getSheetAt(0); // 错误提示信息 @@ -1094,7 +1100,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // List> data = ExcelParseHelper.parse2Map(sheet, 1); List> data; // if (StringUtils.equals("importSalaryAcctResult", importType)) { - data = ExcelParseHelper.parse2Map(sheet, 2, 1); + data = ExcelParseHelper.parse2Map(workbook, 0, 2, 1); // } else { // data = ExcelParseHelper.parse2Map(sheet, 1); // } diff --git a/src/com/engine/salary/util/excel/ExcelParseHelper.java b/src/com/engine/salary/util/excel/ExcelParseHelper.java index c19bb7b8a..9da6eb545 100644 --- a/src/com/engine/salary/util/excel/ExcelParseHelper.java +++ b/src/com/engine/salary/util/excel/ExcelParseHelper.java @@ -204,6 +204,27 @@ public class ExcelParseHelper { return result; } + public static List> parse2Map(Workbook workbook, int sheetIndex, int rowIndex, int headerRowIndex) { + // 创建一个公式求值器对象 + FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); + Sheet sheet = workbook.getSheetAt(sheetIndex); + int rowCount = sheet.getPhysicalNumberOfRows(); // 总行数 + int cellCount = sheet.getRow(headerRowIndex).getPhysicalNumberOfCells(); // 总列数 + + List sheetHeader = ExcelSupport.getSheetHeader(sheet, headerRowIndex); + + List> result = new ArrayList<>(); + for (; rowIndex < rowCount; rowIndex++) { + Map cellResult = new HashMap<>(); + for (int j = 0; j < cellCount; j++) { + String key = sheetHeader.get(j); + cellResult.put(key, ExcelSupport.getCellValue(sheet, evaluator, rowIndex, j)); + } + result.add(cellResult); + } + return result; + } + /** * 将sheet数据转为map * diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 68e029c08..48ae48837 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -9,6 +9,7 @@ import com.engine.salary.service.SalaryAcctExcelService; import com.engine.salary.service.impl.SalaryAcctExcelServiceImpl; import com.engine.salary.util.ResponseResult; import com.engine.salary.util.SalaryDateUtil; +import com.engine.salary.util.excel.ExcelPreviewDTO; import com.engine.salary.util.page.PageInfo; import com.engine.salary.wrapper.*; import io.swagger.v3.oas.annotations.parameters.RequestBody; @@ -691,7 +692,7 @@ public class SalaryAcctController { @Produces(MediaType.APPLICATION_JSON) public String importSalaryAcctResultPreview(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctImportParam param) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>(user).run(getSalaryAcctExcelService(user)::previewImportSalaryAcctResult, param); + return new ResponseResult(user).run(getSalaryAcctExcelService(user)::previewImportSalaryAcctResult, param); } // **********************************薪资核算结果 end*********************************/ From 42e91e32da8091e7f09b09664e3a81646d085aed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 26 Aug 2024 09:26:42 +0800 Subject: [PATCH 056/124] =?UTF-8?q?=E6=94=B9=E4=B8=BA=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E5=BF=AB=E7=85=A7=E4=BF=A1=E6=81=AF=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../param/SalaryAcctEmployeeQueryParam.java | 1 - .../salaryacct/SalaryAcctEmployeeMapper.xml | 468 +++--------------- .../salary/web/SalaryAcctController.java | 4 - 3 files changed, 81 insertions(+), 392 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java index 81266c2d3..2d532855e 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java @@ -48,7 +48,6 @@ public class SalaryAcctEmployeeQueryParam extends BaseQueryParam { * 状态 * @see SalaryEmployeeStatusEnum */ - private SalaryEmployeeStatusEnum status; //状态(多选) private List statuses; diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml index d0a5e2311..28f8e7779 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml @@ -573,13 +573,34 @@ AND t.tax_agent_id = #{param.taxAgentId} + -- 分部 + + AND t.subcompany_id IN + + #{subcompanyId} + + + -- 部门 + + AND t.department_id IN + + #{departmentId} + + + + AND t.jobtitle_id IN + + #{positionId} + + + + AND t.status IN + + #{userStatus} + + + or (param.workcode != null and param.workcode != '')"> AND t.employee_id IN ( SELECT id FROM hrmresource em WHERE em.status not in (7) @@ -590,68 +611,6 @@ AND em.workcode like CONCAT('%',#{param.workcode},'%') - -- 分部 - - AND em.subcompanyid1 IN - - #{subcompanyId} - - - -- 部门 - - AND em.departmentid IN - - #{departmentId} - - - - AND em.jobtitle IN - - #{positionId} - - - - AND em.status IN - - #{userStatus} - - - -- 在职 - - AND em.status in (0,1,2,3) - - -- 离职(解雇,离职,退休) - - AND em.status in (4,5,6) - - -- 试用 - - AND em.status in (0) - - -- 正式 - - AND em.status in (1) - - -- 临时 - - AND em.status in (2) - - -- 试用延期 - - AND em.status in (3) - - -- 解雇 - - AND em.status in (4) - - -- 离职 - - AND em.status in (5) - - -- 退休 - - AND em.status in (6) - union all @@ -662,68 +621,6 @@ AND extem.workcode like CONCAT('%',#{param.workcode},'%') - -- 分部 - - AND extem.subcompany_id IN - - #{subcompanyId} - - - -- 部门 - - AND extem.department_id IN - - #{departmentId} - - - - AND extem.jobtitle_id IN - - #{positionId} - - - - AND extem.status IN - - #{userStatus} - - - -- 在职 - - AND extem.status in (0,1,2,3) - - -- 离职(解雇,离职,退休) - - AND extem.status in (4,5,6) - - -- 试用 - - AND extem.status in (0) - - -- 正式 - - AND extem.status in (1) - - -- 临时 - - AND extem.status in (2) - - -- 试用延期 - - AND extem.status in (3) - - -- 解雇 - - AND extem.status in (4) - - -- 离职 - - AND extem.status in (5) - - -- 退休 - - AND extem.status in (6) - ) @@ -737,13 +634,34 @@ AND t.tax_agent_id = #{param.taxAgentId} + -- 分部 + + AND t.subcompany_id IN + + #{subcompanyId} + + + -- 部门 + + AND t.department_id IN + + #{departmentId} + + + + AND t.jobtitle_id IN + + #{positionId} + + + + AND t.status IN + + #{userStatus} + + + or (param.workcode != null and param.workcode != '')"> AND t.employee_id IN ( SELECT id FROM hrmresource em WHERE em.status not in (7) @@ -754,69 +672,7 @@ AND em.workcode like '%'||#{param.workcode}||'%' - - AND em.subcompanyid1 IN - - #{subcompanyId} - - - - AND em.departmentid IN - - #{departmentId} - - - - AND em.jobtitle IN - - #{positionId} - - - - AND em.status IN - - #{userStatus} - - - -- 在职 - - AND em.status in (0,1,2,3) - - -- 离职(解雇,离职,退休) - - AND em.status in (4,5,6) - - -- 试用 - - AND em.status in (0) - - -- 正式 - - AND em.status in (1) - - -- 临时 - - AND em.status in (2) - - -- 试用延期 - - AND em.status in (3) - - -- 解雇 - - AND em.status in (4) - - -- 离职 - - AND em.status in (5) - - -- 退休 - - AND em.status in (6) - - union all - SELECT id FROM hrsa_external_employee extem WHERE extem.status not in (7) AND extem.username LIKE '%'||#{param.employeeName}||'%' @@ -824,66 +680,6 @@ AND extem.workcode like '%'||#{param.workcode}||'%' - - AND extem.subcompany_id IN - - #{subcompanyId} - - - - AND extem.department_id IN - - #{departmentId} - - - - AND extem.jobtitle_id IN - - #{positionId} - - - - AND extem.status IN - - #{userStatus} - - - -- 在职 - - AND extem.status in (0,1,2,3) - - -- 离职(解雇,离职,退休) - - AND extem.status in (4,5,6) - - -- 试用 - - AND extem.status in (0) - - -- 正式 - - AND extem.status in (1) - - -- 临时 - - AND extem.status in (2) - - -- 试用延期 - - AND extem.status in (3) - - -- 解雇 - - AND extem.status in (4) - - -- 离职 - - AND extem.status in (5) - - -- 退休 - - AND extem.status in (6) - ) @@ -897,13 +693,34 @@ AND t.tax_agent_id = #{param.taxAgentId} + -- 分部 + + AND t.subcompany_id IN + + #{subcompanyId} + + + -- 部门 + + AND t.department_id IN + + #{departmentId} + + + + AND t.jobtitle_id IN + + #{positionId} + + + + AND t.status IN + + #{userStatus} + + + or (param.workcode != null and param.workcode != '')"> AND t.employee_id IN ( SELECT id FROM hrmresource em WHERE em.status not in (7) @@ -914,68 +731,6 @@ AND em.workcode like '%'+#{param.workcode}+'%' - - AND em.subcompanyid1 IN - - #{subcompanyId} - - - - AND em.departmentid IN - - #{departmentId} - - - - AND em.jobtitle IN - - #{positionId} - - - - AND em.status IN - - #{userStatus} - - - -- 在职 - - AND em.status in (0,1,2,3) - - - -- 离职(解雇,离职,退休) - - AND em.status in (4,5,6) - - -- 试用 - - AND em.status in (0) - - -- 正式 - - AND em.status in (1) - - -- 临时 - - AND em.status in (2) - - -- 试用延期 - - AND em.status in (3) - - -- 解雇 - - AND em.status in (4) - - -- 离职 - - AND em.status in (5) - - -- 退休 - - AND em.status in (6) - - union all SELECT id FROM hrsa_external_employee extem WHERE extem.status not in (7) @@ -985,67 +740,6 @@ AND extem.workcode like '%'+#{param.workcode}+'%' - - AND extem.subcompany_id IN - - #{subcompanyId} - - - - AND extem.department_id IN - - #{departmentId} - - - - AND extem.jobtitle_id IN - - #{positionId} - - - - AND extem.status IN - - #{userStatus} - - - -- 在职 - - AND extem.status in (0,1,2,3) - - - -- 离职(解雇,离职,退休) - - AND extem.status in (4,5,6) - - -- 试用 - - AND extem.status in (0) - - -- 正式 - - AND extem.status in (1) - - -- 临时 - - AND extem.status in (2) - - -- 试用延期 - - AND extem.status in (3) - - -- 解雇 - - AND extem.status in (4) - - -- 离职 - - AND extem.status in (5) - - -- 退休 - - AND extem.status in (6) - ) diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 48ae48837..571884aa5 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -322,10 +322,6 @@ public class SalaryAcctController { if (StringUtils.isNotBlank(positionIds)) { param.setPositionIds(Arrays.stream(positionIds.split(",")).map(Long::valueOf).collect(Collectors.toList())); } - String status = request.getParameter("status"); - if (StringUtils.isNotBlank(status)) { - param.setStatus(SalaryEmployeeStatusEnum.parseByValue(Integer.parseInt(status))); - } String statuses = request.getParameter("statuses"); if (StringUtils.isNotBlank(statuses)) { param.setStatuses(Arrays.stream(statuses.split(",")).map(String::valueOf).collect(Collectors.toList())); From eb5cf04622c780e741048267aec6e17289bb5d04 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 28 Aug 2024 11:02:46 +0800 Subject: [PATCH 057/124] fix --- .../engine/salary/mapper/siarchives/FundSchemeMapper.xml | 2 +- .../engine/salary/mapper/siarchives/OtherSchemeMapper.xml | 2 +- src/com/engine/salary/service/impl/SISchemeServiceImpl.java | 6 ++++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml b/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml index d6089636a..bb3e6b558 100644 --- a/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml +++ b/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml @@ -281,7 +281,7 @@ FROM hrsa_fund_archives t left join hrsa_insurance_base_info i on i.fund_archives_id = t.id - WHERE delete_type = 0 + WHERE t.delete_type = 0 AND fund_scheme_id = #{fundSchemeId} AND i.run_status IN diff --git a/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.xml b/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.xml index 2a55be2f2..26db75504 100644 --- a/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.xml +++ b/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.xml @@ -264,7 +264,7 @@ FROM hrsa_other_archives t left join hrsa_insurance_base_info i on i.other_archives_id = t.id - WHERE delete_type = 0 + WHERE t.delete_type = 0 AND other_scheme_id = #{schemeId} AND i.run_status IN diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index b2c68d3a1..699094813 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -2687,6 +2687,12 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { Map insuranceSchemeDetailPOMap = SalaryEntityUtil.convert2Map(insuranceSchemeDetailPOList, InsuranceSchemeDetailPO::getInsuranceId); List insuranceIdList = insuranceSchemeDetailPOList.stream().map(po -> po.getInsuranceId().toString()).collect(Collectors.toList()); + Set paymentInsuranceIdList = paymentBaseJson.keySet(); + List needAddInsuranceIds = insuranceIdList.stream().filter(insuranceId -> !paymentInsuranceIdList.contains(insuranceId)).collect(Collectors.toList()); + needAddInsuranceIds.stream().forEach(insuranceId -> { + paymentBaseJson.put(insuranceId, "0.00"); + }); + for (Map.Entry entry : paymentBaseJson.entrySet()) { //判断福利值是否为空/数字 From e3200f79325719d51cdd384596bc8a0ef444fd13 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 30 Aug 2024 13:35:17 +0800 Subject: [PATCH 058/124] =?UTF-8?q?fix=E6=8A=A5=E8=A1=A8=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E9=80=8F=E8=A7=86=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryStatisticsReportServiceImpl.java | 14 ++++++++++++-- 1 file changed, 12 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 b75c5c413..962e3b135 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -445,8 +445,18 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary // 获取报表统计薪资项目 List salaryItemIds = salaryStatisticsItemPOS.stream().filter(item -> StringUtils.isNotBlank(item.getItemValue())).map(p -> p.getItemValue().split(",")).flatMap(Arrays::stream).map(Long::valueOf).collect(Collectors.toList()); // 参数转换 - param.setSalaryStartMonth(SalaryDateUtil.getFormatYearMonth(reportPO.getSalaryStartMonth())); - param.setSalaryEndMonth(SalaryDateUtil.getFormatYearMonth(reportPO.getSalaryEndMonth())); + String salaryStartMonth = param.getSalaryStartMonth(); + if (salaryStartMonth == null) { + param.setSalaryStartMonth(SalaryDateUtil.getFormatYearMonth(reportPO.getSalaryStartMonth())); + } else { + param.setSalaryStartMonth(SalaryDateUtil.getFormatYearMonth(SalaryDateUtil.dateStrToLocalDate(salaryStartMonth))); + } + String salaryEndMonth = param.getSalaryEndMonth(); + if (salaryEndMonth == null) { + param.setSalaryEndMonth(SalaryDateUtil.getFormatYearMonth(reportPO.getSalaryEndMonth())); + } else { + param.setSalaryEndMonth(SalaryDateUtil.getFormatYearMonth(SalaryDateUtil.dateStrToLocalDate(salaryEndMonth))); + } String key = "id"; if (reportPO.getTaxAgentSetting() != null) { param.setTaxAgent(((List) JSON.parseArray(reportPO.getTaxAgentSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); From 05a9b9e9b2b0ce67b6b27af3c39411a45978ccf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 30 Aug 2024 17:23:36 +0800 Subject: [PATCH 059/124] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E6=8F=92=E5=85=A5=E5=A4=A7=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/TaxAgentEmpServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/service/impl/TaxAgentEmpServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentEmpServiceImpl.java index c595c9139..4c7796174 100644 --- a/src/com/engine/salary/service/impl/TaxAgentEmpServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentEmpServiceImpl.java @@ -154,7 +154,7 @@ public class TaxAgentEmpServiceImpl extends Service implements TaxAgentEmpServic // 关联表==================================================== // 新增 if (CollectionUtils.isNotEmpty(taxAgentEmployeeAddList)) { - List> partition = Lists.partition(taxAgentEmployeeAddList, 100); + List> partition = Lists.partition(taxAgentEmployeeAddList, 50); partition.forEach(getTaxAgentEmpMapper()::batchInsert); } // 删除 @@ -250,7 +250,7 @@ public class TaxAgentEmpServiceImpl extends Service implements TaxAgentEmpServic // 关联表==================================================== // 新增 if (CollectionUtils.isNotEmpty(taxAgentEmployeeAddList)) { - List> partition = Lists.partition(taxAgentEmployeeAddList, 100); + List> partition = Lists.partition(taxAgentEmployeeAddList, 50); partition.forEach(getTaxAgentEmpMapper()::batchInsert); } // 删除 From fedaf50187eb10fb4c83b01a2171aac10b05f3ba Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 2 Sep 2024 14:45:03 +0800 Subject: [PATCH 060/124] =?UTF-8?q?=E8=BF=94=E8=81=98=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/action/RehireAction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/action/RehireAction.java b/src/com/engine/salary/action/RehireAction.java index ac236b54a..a2410578c 100644 --- a/src/com/engine/salary/action/RehireAction.java +++ b/src/com/engine/salary/action/RehireAction.java @@ -107,7 +107,7 @@ public class RehireAction implements Action { Long taxAgentId = taxAgentPOS.get(0).getId(); Long employeeId = Long.valueOf(empIdStr); List salaryArchivePOS = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().taxAgentId(taxAgentId).employeeId(employeeId).build()); - if (CollectionUtils.isEmpty(salaryArchivePOS)){ + if (CollectionUtils.isEmpty(salaryArchivePOS) || salaryArchivePOS.get(0).getRunStatus().equals(SalaryArchiveStatusEnum.PENDING.getValue())){ // 直接走定薪action生成档案 InitSalaryAction initSalaryAction = new InitSalaryAction(); return initSalaryAction.doSalaryArchiveInit(requestInfo, salaryFieldMap); From b7f9a1653c6d0830053abd0c4deb7ece3f2938cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 2 Sep 2024 17:41:07 +0800 Subject: [PATCH 061/124] =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/wiki/扩展功能/hrmSalaryCustom.properties | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resource/wiki/扩展功能/hrmSalaryCustom.properties b/resource/wiki/扩展功能/hrmSalaryCustom.properties index 6294cc5c3..e23e93c1f 100644 --- a/resource/wiki/扩展功能/hrmSalaryCustom.properties +++ b/resource/wiki/扩展功能/hrmSalaryCustom.properties @@ -1 +1,2 @@ -formulaRunOvertimeThreshold= \ No newline at end of file +formulaRunOvertimeThreshold=100 +personNumberInOneThread = 100 \ No newline at end of file From fa861c71dc1de73fc5b6fb996dab7c0c56ebe267 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 2 Sep 2024 18:11:00 +0800 Subject: [PATCH 062/124] =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E5=8D=95=E4=B8=AA=E7=BA=BF=E7=A8=8B=E5=A4=84=E7=90=86?= =?UTF-8?q?=E4=BA=BA=E5=91=98=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SalaryAcctResultServiceImpl.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 36f19b6f6..4496912a2 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -68,6 +68,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.util.StopWatch; +import weaver.general.BaseBean; import weaver.hrm.User; import java.math.BigDecimal; @@ -847,7 +848,12 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe ProgressDTO initProgress = new ProgressDTO().setTitle(SalaryI18nUtil.getI18nLabel(97515, "核算中")).setTitleLabelId(97515L).setTotalQuantity(salaryAcctEmployeePOS.size() * 2 + 1).setCalculatedQuantity(0).setProgress(BigDecimal.ZERO).setStatus(true).setMessage(StringUtils.EMPTY); getSalaryAcctProgressService(user).initProgress(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId(), initProgress); // 12、对薪资核算人员进行拆分 - List> partition = Lists.partition(salaryAcctEmployeePOS, 100); + String personNumberInOneThread = new BaseBean().getPropValue("hrmSalaryCustom", "personNumberInOneThread"); + int size= 100; + if(StringUtils.isNotBlank(personNumberInOneThread)){ + size = Integer.parseInt(personNumberInOneThread); + } + List> partition = Lists.partition(salaryAcctEmployeePOS, size); // 12.1、监控子线程的任务执行 CountDownLatch childMonitor = new CountDownLatch(partition.size()); // 12.2、记录子线程的执行结果 From 882716b10c722bcdc4bc84d9bca8cd704076880b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 5 Sep 2024 14:13:43 +0800 Subject: [PATCH 063/124] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E7=BB=93=E6=9E=9C=E5=8F=AF=E8=83=BD=E4=B8=BA=E7=A9=BA=E5=B8=A6?= =?UTF-8?q?=E6=9D=A5=E7=9A=84=E5=BD=B1=E5=93=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/salaryacct/bo/SalaryAcctConsolidatedTaxBO.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctConsolidatedTaxBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctConsolidatedTaxBO.java index 16e46d6ad..d5155f0ae 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctConsolidatedTaxBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctConsolidatedTaxBO.java @@ -59,8 +59,8 @@ public class SalaryAcctConsolidatedTaxBO { || TaxDeclarationDataIndexConstant.ADD_UP_SPE_ADDI_DEDUCTION.equals(salaryItem.getCode())) { return salaryAcctResults.stream() .filter(e -> Objects.equals(e.getSalaryItemId(), salaryItem.getId())) - .map(SalaryAcctResultPO::getResultValue) .findFirst() + .map(SalaryAcctResultPO::getResultValue) .orElse(""); } // 当前累计收入 = 累计值 + 本次收入 + 上几次收入 From 7393d962591b53304d4f47487bf1e6ba7ed835a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 11 Sep 2024 16:13:49 +0800 Subject: [PATCH 064/124] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=B4=A6=E5=A5=97?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=8E=A5=E5=8F=A3=E7=BA=A7=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SalaryAcctSobConfigServiceImpl.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctSobConfigServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctSobConfigServiceImpl.java index 085abe60e..c4ccb325a 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctSobConfigServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctSobConfigServiceImpl.java @@ -18,6 +18,7 @@ import com.engine.salary.util.JsonUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; +import org.apache.commons.lang3.StringUtils; import weaver.hrm.User; import java.util.*; @@ -171,14 +172,23 @@ public class SalaryAcctSobConfigServiceImpl extends Service implements SalaryAcc } @Override - public void updateBySalaryAcctRecordId(Long salaryAcctRecordId) { + public synchronized void updateBySalaryAcctRecordId(Long salaryAcctRecordId) { SalaryAcctRecordPO salaryAcctRecord = getSalaryAcctRecordService(user).getById(salaryAcctRecordId); if (salaryAcctRecord == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156474, "参数错误,薪资核算记录不存在或已被删除")); } SalaryAcctSobConfigPO salaryAcctSobConfig = initBySalaryAcctRecord(salaryAcctRecord); + + String acctSobConfigFlag = getSalaryCacheService(user).get(SalaryCacheKey.ACCT_SOB_CONFIG + salaryAcctRecordId); + if (acctSobConfigFlag != null && StringUtils.equals(acctSobConfigFlag, "TRUE")) { + return; + } + getSalaryCacheService(user).set(SalaryCacheKey.ACCT_SOB_CONFIG + salaryAcctRecordId, "TRUE"); + deleteBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecordId)); getSalaryAcctSobConfigMapper().insertIgnoreNull(salaryAcctSobConfig); + + getSalaryCacheService(user).set(SalaryCacheKey.ACCT_SOB_CONFIG + salaryAcctRecordId, "FALSE"); } @Override From 54f9c8f056037a92fd54da1c9c0516f07bd6c894 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 11 Sep 2024 16:15:02 +0800 Subject: [PATCH 065/124] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=B4=A6=E5=A5=97?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=8E=A5=E5=8F=A3=E7=BA=A7=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SalaryAcctSobConfigServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctSobConfigServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctSobConfigServiceImpl.java index c4ccb325a..61d79ab9e 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctSobConfigServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctSobConfigServiceImpl.java @@ -172,7 +172,7 @@ public class SalaryAcctSobConfigServiceImpl extends Service implements SalaryAcc } @Override - public synchronized void updateBySalaryAcctRecordId(Long salaryAcctRecordId) { + public void updateBySalaryAcctRecordId(Long salaryAcctRecordId) { SalaryAcctRecordPO salaryAcctRecord = getSalaryAcctRecordService(user).getById(salaryAcctRecordId); if (salaryAcctRecord == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156474, "参数错误,薪资核算记录不存在或已被删除")); From 8aa34b806cec77862c03543fc468aa3e97de0807 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 12 Sep 2024 14:50:10 +0800 Subject: [PATCH 066/124] =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/WEB-INF/lib/hrmelog.jar | Bin 137248 -> 137340 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/resource/WEB-INF/lib/hrmelog.jar b/resource/WEB-INF/lib/hrmelog.jar index b1ce56c1141707d25dab68afa9161f218a35d92c..b8a8aec57a748af54222f6450a2b70a2d3ff48ba 100644 GIT binary patch delta 20350 zcmZ6x19W9e)GZv_wsXRct&VNmw!6a<+qP|W$LiQl$F^Rmd@knG4|MhHtdu>{X*njZ)Fk8_7CK8`O zDgO*e!M^+%gp-peD}uo%`hmgy$4#9+1N{$4MR^B>N$q+Ag=!oHYXn?3>rn z3L#H4!$JAqJQ}lb=)wLJL5Z9^@e&X9zq!PZe~6cO(2WfEWq*Pt{uAO~Bvl&>466~3 zh!ygGtl0jihFt%dCZLk1_CSEarz(Pjp*KQNQ2iCl3@`xy6ZhZZ{-Gd3fFU(b(>O!? z3CdIU7q@@_!)c6SX!sjC2kJi@v(b}z`cHa)gCHb2C_|=FL4qMR#xul85pQ7rXY@Zh8)=Mj{|fte+5Yfd&FmrnXcEl(10_P+BR7)U{FRjY zzf@@ZYN$UIXmREFqu{|6<&Ve2zt+%+ByO0gpDF<$p%0|JJAxr4aB}6i*r0Uq6E7?Eks{kCEDg1O}4| zg#?D(*j|qQXAM&SeGmSdXne1r{JV)-T>pcR5x^n-ui*coh^hF<|7@O$Y77F@e?@`( z9~W1mQ#EDc-3S?QEOpPBv==;RT2_+O59N*;4uS#)3@yShK*AZ8N{Zot0cNT9mkO%l z9eH#M?$r;;D!O+b2Gq0a42 zQy~`d?z0XW{0D-X_afx_lM95e{w^bh5Ew9?h|%iJ%=$J08mF5PmSMlP{R#g~ z&a*>I4!Gf7@B2n5-6<2j>2m$}3@!hW4{ zsXeNn8|ilMMX|m@?CdU%>5|#myamqfLQ{RtK$1Tz;JqeX z{H(m*Wcz3z{G5KW|8>Q^uqqPUDc>~(nfNUI3)q@F{U)_5u!XS|U=={B=?DS8ji$`S z_CPF0Vfm{ZRt`Np!_lfE7LdT^+W~NuqfmLrD3x3YT7@M2Ko=0ji+1jo`ChgePe#a# zV#gMrA1<3}Nf*-_j;)_+Nws2A03KsN5Q!){L@^T%JjBqFa;!f(!_YfgU!ZAI!d{OT z0q$_gnc9#+hmv|)l4+oOWDNfn1$EZGn-|Rocv=-S16~wEB@GPZ?g|?UL_b1~6ei@S z`@^|3eo4qK|C2_4(iA(hAUZfZvm|<8_6~(yR#iCZykQw2WTsscy^oz)7`@cem_lxu z$n$JL6xNMN8okuIKoz}^U8y9TIRmE>7(U0wERVjQfm0g}n~_!)E|tNxP6MzpjsTQc z?;yx!Nwt((8Mgr@XM+sTSz#1~xah(YLGj!%iz|+q6B~r2v*lv7RBOf2eU)k%>>QNk4>Q>B>_pb$6_F0adx0qN;jYoDn2Kg1?d+WX<^6O=h;cL8#1RpB}?L)C0r%`?01 zXz{$dRg!B`vF$KFBMd9q>&4N5HrYG&*e)hhJ48;5{4q2AK6hOPyIkR?Z2DE#+jw8q zc8l@;*$TD4pHNbl1PfRHX?{GA#K@LApwVAum)P-iD(WfmbgJqr*{<^jQ>;1yf*wib z__8Q6`o*Ka0a!R^Ojt)=u<%CJOP3BXVl8)+KralGjEP*rhX&9ymTG|ERP5JDfSkpC zBso5E5Z|f!{>F^&NNP#nbHo)!#XBU?-q4EmONQt&z9(hJQI^9b`*j+iL8!{7?8e+cmU1D72%xa*ez>&zxf zQ3q^Ne0ncaU{^6_{>m>wJ$4S-tYt-f!3?-Q|B&V02tlK|pIw6#l0RrUx0c+*-AD@R zkcM6cKBg^!KK#)|8uGE9F1{TzXgL@_bRTQK4NFvU zjz)ZNTB+k$xhpU z?>?yWul_B8U^*Vv2#$%mz|hLKQ=1n21*2W@HZOTA38@LyF;r+3IhwP|l(Dn^bPz)a;$;8lzRFx-+3|w1;4p3@fIO@#sK!Vk=F3DU?H94cD4ujf=cW(2|AM3`~0v zh8`KH{`;9c8nGpBRA<(+iH`PSIw78h>#>i1-}yzzf_}7+JiV3+-RW~%iTFJ31CCOn z>mxCabN3zbiQ@XYX#)}Gj@vUEWB+<{&eo|k(bU^EFP{Sk$wZ8D_uW~$tU9ovjGGoU z!^z#HZ&1~sjMV(4Z;*rb*L-kHCsL%nVBrUFry^D%WMvQS1RqRINY`h?`Z3$jvuCM% zR;P9=+-cFxW`AjOuM%1&mfeIftQT9<3-GfSKT$Q#1lKij|*{@ZmH0LV*4IJ-jr;<~=?l-DF-F zR&<(LJYCdm;Y*i#gq@77JVHq5Z?!_77&sbo{Zti2YdZ6SIU^99BGS&%_-aewC2EWD z@EU0+%Z?+@m&pgTZ>lklK5{6(B@Wy2|BJh*t#3;=BFCrH6Qru|*6GW7h6>@a9X{w{Nf(BWw2r2}gae#=FfsvmY z^9X!+{OFBfI;$6Z>!i8%Pn#>ii_rDg*rl&hm8$(Qv2K0Yn9+!c!|WK*Ty4nvgD|{Y zWce`XfR$DN58Z*IC}Hl+R}+sYO>KOI)WBA<`kNHv89O$U>06j`&T8!jaMfmWNw8Ob z?wSui<0!TaAi>}YkMUqX=R#~m%6JO=Mnc^3C$E!$s4nGXR`H7sy|yBdIpKF&zU@*) z+IhZwI-@sb*Q1sqw^AmgH{eC}LeG{buCa5oj1ZS7KYvF}QH|Hnu@8xa9Z2!z1A<@om z02g?3^DkN;mvC`#;ph-BX}LxTze*XuLd96iczm_24s(RHgl0lsq4s(TWNL zK>ZDU*W83V3JgLoe7$Y)-1+|Py33M|yQb^28B8@vm9?@AsaAf{V-XMkkg+OY2p zG5KMujc`plx_Cp1^vMwfpCV`?PF*-T-BFBub#z)u+}|>Bm7W+O=!Moo?8`Wto0 zRzMha8{J4R3;k&Q3DZFJ7Birf2U{=TWkZ>kZ86^^ni>ZfSpL~qo{Q$NK9Xz4a#=v0cj?zGoo7E`woLB?EUmHYPr?Wyl;N`LvwO%w~~F zZIg8$#n3B}ZdT!OO$YGHr`L>euz+jqOe<0c>}&yRIkAkn*oDm7%yhg7cg-)4X6aUs z8#>SO#!TX&mg9-CkK)B*C-07gV{2v$$Ly0%7-CK0zF|l-wvDH7x1ISTKY$tyCv(fE zmyUUBYA9_V!*0JFjbAI>`CgS3@ah{ZIqrgB#HBAr*QA%=*1+L z9y=3wLG#xvwnR`c|9I@gj@+7<`Oh{Jp!6p5gt*+aglx+wIIeuxXRL*QZk`l=2|GzkO377=`?9#M zqm6FdGDyAroMQ$W>6pA;T7eCcw$?ybExOaB6#3Y~UN>AaZs%qU&7z`W__&@b{Z8)_;^J3=%hPXUA0iMOdK89Qs$AqK+?*(7W3${E)`AN? zXdz!E)EBpe2E9mThyh67)uJ`kEfydwAR8LunG3u)$ef+!EH>-$U2&D@$HakFHWYhM zIt9X+m{nt=y>R?>v3DtEferI<4LgxU9#lqd>rhk*xCb>aid@Rki(kc(mRL97?o7dfqqjrHsDX&)r081jm!!T*zc#{zIZ~b} z7wYm6lC?qgFf2hadG@y9&FeY`%6xx(f@`DJp&43%CIOfLy0*Y>T~f zLw;$)Z@LTX(*^43QSX#ODschYK%C}3q??Y>@J>2GYvcJ^mrEH+O?{nAl{0DF?KDRwyW#*$S_ zFss;ts$VlkwBblKV5P`KFcz6p|+93{1jg)FV7^7^{rL7e^ zy%>H2&Hh$8;gZ!cNt1efN0)sguD2n&@@no8 z$>5MomkeoOrFGTmDiF7e<(t`|m-=m(*Uba_{H$`%dS&SMk#lv2PU_>Z*945dqKAf* zxYvAZlk9B4T?`v=@+ez*Zr|s|w|FhS={V#?U&7@?Ii&>__lpMazGqfEJ!Z&oL3B~; z2h!=8E(<1a0?uW}evQN8de?2qYS-FI(`|(vZ*42Q#*D(Mde%3875nLZ@Ef7*&S-a- z+MO~(;$M2Y0`xvu!SxJT#U7YdY@!=tzck=Ae1EvX1Kc-&bsv?h4(_7>J^Q3gMJ^}C zQni3}pwF&a8nUYLFon_KXlNZRpv(L0BYTX44x`z({Y_q%+~7->k;UAvS_ZGHOqrDP zj{At(OD~L}lr{R=v56+ApTpH{YXF73k<04aI&aa`*wG=$ulZf`&(F@30#A@_-ns(Y zDdaORD;Ebqc(>;w?@^lE#pO%qP!)l~F^hedHgEl|yfJL6K53*KN&JfGK(@lR{G~)8 zItz#`w3CTA8EH3>vicmnGHQ}V8yMA)@ycBD$u6xl-R;^+nE9n*^9=@xFUA;LnCfse zCt(=rcIz?D>CIhu_}0d(LM)7U!aq>kRFw}oM=eQ#c=O6(PHiW_9fzW;5rwX0o>@P9 z>lc|S6U37xcaLu(r!+?VfYE2mzcbH=2SIJyW?#zsl}=*`jw`Fh zvM-Yyj&9_hu{eBJC!8i8xL@!a<-?(F+i&>SXpQkSrr|WcjDG2Q;DfkGSo|)x?(&3R z-C`sT9MU#62zP9Dg~oN|kws`rpQJ5a5+@@JM__+Q3kY0JPiBQfM7FgRv7B5({eU|I zGRR}CQ<1?0Ues^2we8NFB`wAH9THT*<5iBN!lof-Zi8fkgU8-EJH6re(zu!vdnNZJ zqEmsP_8lsP?Ty3wmOJOHEuojthm{?IkNPMKzCHjaF=RLo zEJ_*VuQ)y_kblUBq!X{1N31&HUV@cCpSN=gCU(;a&ILQUgY@g(Fknu+10(zvq_(g- z(Pln1Y54uSoexC0-KK489-)>zEoO3qlMgse|G7hfQ%3@BXiowWrRDx!Qc{^@0-**w z+1R%|f)kSSGW+z;O@yz|N#OZlm8?kEz+@iJ3hgm%um(*%w8(Zq>2$^$%wZYrJQD%c z4ay1=ty8zeaeFh z3tlVJiyK-3QOKl@DxIfOZwU&RD$iXL8j{MCS}&9Xc6in z_#xNSLdfA3GtT@X9K@k4uBg~}b+_sAv-*SfA}0_b%Xz!)r~^yef&|B1V0l__l#)j9 z3{-8c&^KdAx#%_qO>uLfI$=Vy#e7~#L^vcANfrc7YI6#O$>6&c`L=eS|`c} z+fkwwp%m`i-e3Bv@N72Nfu*k8HOA84_{!GG@)#h8B_GDejbh?6wWjKM&0n8{O=%PM z99_hwFB#Vf*yJSU&Lj0dY|Ph-GXwMq%S7DNR4i@zw5K_=Vr2DX!|CYs%_b1a!xPj9 z70rd8B(DcIzxp`UOcP!!IT{gw*OIBKpetfowJ<_%PefTE;+)K}0UtZ+eIzPrO&Di3 z_;3*T%anN{WW24#%A))1>Jtv;n8YJuLIUf5VWac1%p)x~x>-hZCZuqe3=}C@9LUW$ zN&IvpSpU&_$MsGcJ=j_c$|_d>sHDfoOh54RKyE*6!N~a3d)O4d(B7G}!TEBc&-X?KW4pUSfTBIr_r{e z57*m$NLnT%8ZP#R1q04;jIq+`lN~Jc+8(<9E73RTzTHfxL;-AAeB(?vCY_?9M_9KI zb@J0-=VI}+FTACDFk13sj>6;<+MeV0xn-$~Pu-6mF_xsI%D}IS_s07^*-lM^>!f_) zT!cUEe9ni?o|qCXqw|9p^2G4KC{WKc(G zvzHu6b4$(z&iP^dq-DYEdeNr_{X)wAPPmKMUt{HsQ^RsHIY??fs8@sM6KL@!25LcJ zxdTKP!Yx_Vn!^0=JK|hA@B7fDZ?dVm zW3{ebQ8An~+mUX*kOpP9l-}i&wWTnwsni*U>u1wdf=0mdw!*;0G) zk~T>!VlDYvOp)}Ec^a8)AO_9BL)~3*AVG-Q%!4kygK~!^hYlgr@WH@vy5?Ls!N%6% zyl=!&6+Fe!Md5A!bXN_G3n#ZZm3aVonV}N|GD@I-?;PQ} zaF?6jpzDm0o9<0b$kY%#j&`hKWdEHhXm#RF?t0hi(peKdJ(7Ch<~5f=GM1WhDtA-j z!Q&9bAb@;Z>=nOMGnU_{e#Eg{IU+Z`e(KtO^#e8Lwzzii0&Q*<+qkO?Q7syQaJYKMJ!X6a1V$%pZn-pt(QHe$^hjxQ9L@&n*3K?KHK z^~yOWaL#3}Ku~$HTCEgi{KRx55RmBsEfoghB?;r>AnT`rWE+x6_frf9&gFB;hI}wV zLiMWRKv@``vl<~}1ylN_A+hGc(UJsBaWkPa1UDMtjtAi9LtO-DFM-@&p=5!t=7DYm zz<7g2U-6F{AsnzEXASZEf~3c;G3?x?RfqUpH)qHk@qmW0RVeoYygt7D(s7hCR&tH=hFQd6vo+{7RM{qD>lV0 zPL?fqO37B*V*}*`l%P`8 zP@GFPOUXzKqA^LJzDM!Gp$e}D{G93MK$Jn-G1e)sL*$StT*6vjvQ%!Bw)>SdbIQWL zuWo?k?O?8R74DM{mk77oR?P&FIx;=;oMR-X$VcPAieRCrUWY5rq=|%Ww1WW^+b5Yz zA*a0K@?AWhf!hs|!b@7sn!5$a_s?IW3ryoG=HP=Ud9fB%h+NSi+5Ees!{??lCZjPKagI-%?E!ZERkG%_ZNFR`=MwHUKK39IgiM0*IiJuh< z@$hc8_+Fy*4%rh|Zr1$y$&i&w8N^~Co1tgkQ8+b4^NM$;Nl7e}K7@j+$m#MAEs6Z~ z#GX9M?nz}3&8yX)pfqPv?A!|5msUUf(r`AgkEb020Jgy+T+Awp=a+t!H=KQ{P@H{l z-t1qyARGd?MSdi)lnx&Q-8g!2Gq=X~rzcLA;N}2yApFwvCgif42o_FhK`tU7-4&U3 z^AjTH4n5}mHcp1u*5B94!o5OD!74olJqK4X3&fIDF|HtXFw~Tkew6aa&&blkc?LK| zOqLXAB z?KA$4UK84^B)Q>_y`{GVdzl~Mk?ZD%tOc z5ss))E;e}5KhJLM253+&rYDs4W0}yV5L~0zi8iBZ&Sz6z;JK;WfML!8@b?rr^O$b8yY>e^f{ z;EM9v6HR^+LC!334fdgL%9t+g)Wsb!>A}0DNg$Y(B9z$y^!`zrig~7ZC%%Z^4<}{| zU@-I}c2s#mW!a)y>-hvH+{PBOWFQ+8oa`FcR|<0f341=SKM);SK5tVbhv{$0=-$6~ zdWM*oqogTDv+#x`ow2`6$fhwnW=r{AQeCvEY}|9qki@N1ijuWw9>|XbZWk<^X@#+3 znZCkgvOGEud>E1ibVYVQF1-R~66>ITJnpdz?E=!GPZnJ+JV!-aQwsJPpmeLS611pG zG-B5)B}TX#xe}wYy?X@McxjlbjkeS064QS{ZA7(ehEJIS0QKhFmHH}YI? z#GTfn{TzSM6%0U)gpH#0)lZZ_Jm*J&p>K|EZiqBxS7dLJ0bx!)&5jf@2?h(K5 zxpYrtZUEQt}y(tW=7#hTNm0s3abDxFAE3r+qEza(ln&B%2{S_f!Ttq)Sl zCNLSIlxM&CVq-NFPsF89C`2f4ax#2zzqQ$A!`{pV$TWLn_KSuG%U>Z3br)!8w2?oLB?=5^B;Zl|vV%+#WToXRj%$ zqam`VxI{Hz++0E_hDbB`x(q?5sHz-WH`UGuE?I_1cV>PRnjqhrY#O&NnZ(vBmlHfs z1PsPp_GTrO20%26dH`+cFCA1Iecx zCf6*T5A=7&eKeg>@GhH2Y=qJ^n(>d+f#B=tY^rFkQN{6W;pC}H9r8b1zb~$8aw3Al>tH+U&X34D!@TxafoGsk z81MC)(?juRMh8Mb+E6>wz!~HUabRh@osf++olY?CZ;><92R^SPpMf0H?#9yTXU`1Y zC8P`UsVnz0t(?A`U8=^z=i@U<{W1Mr?E2r&!Vgde{Tq99%R1heUYWHPmp2n<{2v%z zxnG9_wl3?CpDoVFKfqr#9UsDvfIR}}*-O|3@UP0IjkTg*f2w5lcVU$_IEcpi(3v-0 z_M<&GI1#=oy(PX=*js#};x92=7~&m6?1)?&Y#+t`&iRaW$?$c5*_rrqTXL&42FR9kX*mT? z(ArU2820EayX8YL_k105``utDxg*zvlF@l>{FQg{3Y`GiId>P+w_(>!An3uyox|0H z+Y#+GXw8!Y$Foj>IeD}u-~n*vA?s6-^>JQB_ljUgOK34LCNQMRGPywV0I5wQ#TB@_ zoC@QT&#e^sRyvQYIPBiw03;3m3XOg|hdKSs%aq_V^?^9DquQjZRt_V~@#_DAxvXe1 zkN$3$p>@gJB<0&bYnqj;e@5jxn$Z7MDPlNa>Rp?CX3cAJ+A`aN1ZrJkM*oHdl>k zpjz=B+~O2<@?$+i*gm#o0=}jMIQ+P)YNJ6s79v?p`B^tDeZbEMGa#msb-mG!k#+n( zw-da+*`axdVeqCq!dmLm8PM{WL&Xn!!BxwwUFQern7;C}7FLp(y;1v2IxpLrvmdPi z#Q?^KrH&ru#7Un$feQW0U;5ER4<^W#jm+4tE6C?bylpi@0+Q72c4a5Zfo%5s|13fQoNcLhTQlB=f*EE zV{ArWdt1pPzvUm2^1dwfvTzU&o}ctb)bawT$cIwYt-YJ-N$%B&D~Nw`)x*_R&Uj!C!tu{z;YRsHVdMtFQ?<^;l?#a3Q-`SUa(Qs*Sa zpA<-YQf3BCKpLiTc!?;j>yE?nCE6OWsX0|YoeEK){r<#sqhG;S$dY2GHU(|I75}Py z#d*P%l%(o#QBnQ{)VPqS3W#WEl4uPfUVTKpXW8LH3lReW_`z$ut6Oc$EmF(9dqDaYP2RfZexPZZAxnocuj=& zq*5xoL)nEL*bQ71Vc1pXg>Gr}fLi zH4>dQCRlDrdlIA#d!Oz#RE;$!1$*(F*h+FCx6&xG$>LW{syyWEg_pY`qcm87VC3wj zOR^PQErHdam{^6W_0TV6F|*STE9Z0{p7-8o0`4i_Mqice3+|OqOV;Z>%!+@Hym7!c zb71S`S}@FsUvkBUV=bowAnwR)Z%YhQb3&5XJjtKK&)!f~+( z?5MAg`jKY##vnB&Dx~0&t=+|4{cwclMjb

4oTK#N$|s!Pf>BLbQJ8jg}2LRSJiA zdHg(X%29vi;`O1x$1@J4bfz+e%@LAYsABOPgm#Eh6M2JuNa%6KMG(9B)8oy|hKP!q zh>C!a9Q^}8z8PawMEc`uLCEwP&m=k@c!T46NB`r6Nvd=2i1`XoG;aIx4SHF2y*`@> z8*?hU?7}|4)tA+EuUQb;m+o$_**|s@N#u#J?BOEl`i+4ryY^S7Gdsi+UfH1y>95NW zu{R>k!OP&+XP+x3gHWAu&+q;Yej3lRcT@Ddo8W7!1C@Cv3(?aW%H>(zs##UE!G_!JXMAu^+=Ot3_&5i8<30 zOFJk6z($RRAWdy{=SQ>Kw1sp<^1 zei`|A@VL*uNzjC)wLRYx8DZD%HC`ldS+Xi*P>FVB&8y7%*uJ6-h%HaZhr{W_slYms zZB}y3Kdh2sK`3_Qk;5!k=fb|{DLw!uL1!3pXoH`YcK8hCKeN=zq9Dq77uzNh!iB_B zIFv-^oF{qb=TF8ss83{yPZ@~dtMlM2p2=1;ZNdv(nl9wZKNXb+Y!|2%d(y@5SGj{u zWod*8K^I3MBQ)hT%y&3JVLk~h{^fwFi zyIy_<|BJw~rV{&bu1rJhbG!BZ!_0)a_-Tp9M?ecELbUHye7;!r=54M z>trTPh&)x*UI-;bUnh?FFfGTLvL9IdN)EAZIX*1{Qv$lV7Q{7EyF(eFr?=lF=6KUe z?Ug7DH%Wgc0lz70c+q~xDq(918meeV3Ri>}kVb8pZpSIJm!%M*u_w>2&p|?Wv~t_l zn@O+r$8h^39rzigCbJQJK{c~U!GwGhO3qJx;#j^vkpJ{nPhftC3yl`rXFo;crvAXC ztF4|lT7uE!x*@(YxoXd{^*~nOV~XranDcJF`z&{L_|Ny3IPk=q5lgnoP~y>8Pv}7e zHb20xI9jr4IX2;(G(^fBT^ypvP!rj3^qJl}H}uOaAlq zHSh_=(d?XG7N@Fw}j;BV?&B9xAc!yRcS;AtXE>Ip^tBKZITws za_C|&-vs4(T&DF(!&qk5HYnik@gG4FI@_|jui}6U1}y9Mvz;UOT3`S)PG%~y1x{wf z>*DV!oQwLb zeGfo@=)ODVonUJx0@}cS9H0iIRug7Py1#Mc3SdZD#Q)wLm( zf%mF*&7qgD`!mye|KxCJEk(ZmgRs!$Vq+kAyO^!y)(1`B}x{NfoNcIrHWg4@~?`bE+%064}8~8HoXQpf-uhVk$>QJe- zy9;vk7*4M%zbsNV`jW~Ynaoc3AJU5-QN&-yLBr4V<}jp9YH58AAQ-(;9@QR)8Jc}+2V?1IqWY8 zwl=o^ceAs#LB+T7qa(crkqsz102OXK#dNukoCg=Y$;HTIRvYkb2wmh}_Fs={fqnwj z{eB!efO_kYeSZnm$0Rs^guWS71Q>QgErk#^nm*BW4YgQ{0kmCOWrIMZ`U7)HXeVoJ-qCApxqf9$+ zN+M>+fT#EDPS{Cvk{#|Knh{|mMOB6cV<=GW-upo?YynLy$?HXOe(vwe1hvCdz62Vqk7%<3!n0{Sl>691amA#aiKj;eT5Spog0hvd|mo*7ASyzsLUCV6;Pph1S00v18%><0)8=(btSK^0Ps0 zhx4KADexSnUCHgzBsUzK;0s6&CGJ#m)?;!2a!NvM5|V&C;L2)tq&6x14eEGjwRqAX zW#kPVnEtCfzT7+2^>&>F@qO9#PH#1AqoMkUZnb=_P5B7nTmCQNafM&!hV;5U3WKU- zvi?lO!WKG;utEZ=xLIyY*~lsuIxdD_j3um0X~?BF+b8r6_(j*K)+)H58doZckTzu* zLp0+fXP(sCl;*-!ozhHZ(PsfTIe<8=9cDTgCJEr^uDhmM780zvw!m zuC5hiy}20BiDM@F4-Z<$t+sZ3jJk#Ri4nS~$ECa}yepYby$QSvn5b^)QwE1n%#|}1 z%>ggv(IMsYu!Dqrve9aTrUk=?rAF}K2{XyDDkbJ#Gcl=iBUvlX^FBJkCehLVHDI(! z^?&WlP98dERwVfJ7+<(`Ct{w4HwZ(>d?4mrVyuIcR{BcQSBz19SILyX5%6irP;ZGK z{4E9QMo{RyIn)Qoc#o2AqVwQ)U)%J@*PX!d4$z+|=6*-zeewH%tYYeR!O713-Ot0` z%X~L!4aV5TlZZ`A2W`?2c_R#r+^ffRHjgLoizl6;l_mjVfbNCyOvJhIoUTBCvl7TT zf{G18n^Tx_(MEfj2}FC6oZT&p78tc27T%6lG2-Z!9OuaVCVmn3nIY5FCgBYL@cQeR z_cAxIx+d%8m7c-*m~rBewD-~6aHUbY7{;7|YK-Z&$m4-Vc$y^roN5GuyIH7J=Edda+ct7fi!IxP zJF+vF?u=R#@|*kS^wN2S5zKKC+(X zu2RFkVn<$^*g}KDD+B3O0PH~M`MuIc`xfw|?RMUC2sHE|rCNp%^zwdiN04~z~h>Y-EBKGNCV3#y0E|BF?2RA^HxOZt_Xb1!U zS9<&mfZW7f$z0rAd{9fwE>p&|I< zxD!C!b-0|D18>5T`-VHOVOn#xl~m4=oyDuuaaF3A>+6%j%+`jDZF}p6JHD2K1Mf=t zt0EG%e{Ep12yp&~Cm|%dDWl`?Mhni1A4BXAL|)(-vepg65kMix_Bc@A z86=Aun(Py*7ls>0d?e8@ix0PClvI%>RJfWxWZ9WZmqMaP*aMC}ncOIt-k*1mxVziDBH2LFGbz$#kM9tF z)UN#@`=yUc&}7S_98krj9FE|}_K5k`5l+tVlroYkwCf30rC7!Q?qj9cO7!_5>%2hD z#6ueK4)D&neSY1UP~LR2jC{cqr@w0t)0&vLS70k}#6Q4}J`W=VU%+_aAe5`So^Mx# zprjE&zg(byMC54V&I*;z|64N8h@r_gd$ByrGR1fO^2DEKe452c!_2mz8D&MH9ZQe* z(&0@a@Y~k+s0v;is1V2`Re{R%CtR9J-l=lew7@3ns1%#C6r21`=h+$n^r=uAQ4K+r z`m13j^7nCv?~Xvz-Q)SEqYSOwk2vU|tL`+sFf_Y(T75h5kb}70NW3na3#9mDn<|1C zj^^ci&+Vp~-J_q}uDT=Lq1A;Pzr6yk45)Vq)NvJJbbedl|O zX+TcNaz(LkSg4MmfpS%sa4k#Yn$2dX6L08Mn{ZrB&a|dXX5{Cejm>#ZHxZf$Vt#naT2K`=qH{9m zE*yTHUG~E|ci~fL8sxf)!+{<&6s6=V!vqcv>6j3BOGZ(NG5^xYIj_#l^}ad~sbed7 zuCSbN0RJ4_ZzLr7AmgD4L_iAH#DjfnQ?mQ+C>glZVxsH_8KbZg$)aSF5sX5@-124VIZ)w20UnQ_F&xu$-kj+)UKHw31f5)$fHTv~hJC@iCx}``9}Mxyt?TrTc1!Ur>TC0xv|@;qTK6b*_(n z^(QZ@=&xI7RIB>a?u@bz4?~}Bw->=qUWViLTThJENV(C2OZ56CIRtvK*)yP``BuwG zn0xtpDsi#ua{kY~4*CM=a0#*?Z1`y`AO#izC#OUn*!E*(G5gk6lB$EwUtEDH-{>aq z*{4_CE%SXilr0BgXl5nwqXeng#Oz?uq^kDaN(Q>ZYWR)ci&L(HSE9o1W<$sIYv*1V zmXGBujRzo0Mv6R&jR+~tEpfwHBXx0WqWT*n5;Alo7*=_tM;)~mlF9faA_5?U`+?JX0zrc>ebdC%{k=zw2ofDa zt&o%PI!69$P#U8W#z=7~E3(?wtXAbdeod-`Sg?>f#zZ7v_DOF+tY~UA+y%+#RmWWm zlnnA8Oriz2)L)&*Jd5|Ozqp+S&JoDcD2fony)kJR=-1!xhNTbAg7T|^@9)m3qv(L7aWOPC*hv7UVZKSP;i9~i=C5{Vr z@e=6n!5Ck+{s0961_`>&xaOaA{8<8_;=zM1eHWwYCS-`gu}T}2T+gLeG(2Pp^Voa) zC(cy!>8r3bZ1%CaunqpdKCV3+s{D@XjCl3Aw|{!rZNpLPQ_TbP2M^plc%uiphrkP{H`rKUv8{RE=5 zM*3#ysdMp9xgUpX7hSY(?-cBQwIflH)HrJE(G^r}VuGlg&AM4i{>eRKK5?ih`0Cy~wjX`dahH>914@^!Mvydt+~siabSc~M zdX{!oF8fznmq6^DLDJ@jE;ae%9znD`qng&m-9=o=ks8+eCiC9-gA?a0lQd>^B~Z^D zW!urr9~7*}h$WQz7+&shH#AskNtXy;d3#VzPrj^-IXD=0V?z)UBOM5lhkD9v$76qC z-IJ`4yQb7VdHbF>UfbBo`fW~1LEC}N^W@#qfo1a4`mjBycfrmJ&XUduVyDvNSq)Mr{#2PRC{D}Rdx;8&ab>Bvc>Bvf0(!ZaQ0?Ni)fuNniG8? zNK~3zsnB$r72R6JcV9rQ;P2;2#r)rMMG;X?BQ7-6E>51cT^r+6JeIXqx0-d(XO?<| zk4HODvo%R&TRw8joUXashIEu1`jt0J!1QA`^0GU7ow6>+dr7x2V+OUDNzc13zDRem z9L-9z9M3Gyt9z|I^qvtjY`_#QOe`tR5%y^hhA~Fujvj{)k3emY;*|+4MzM{IwpQMH zMxWE#O)jm*HEE>fVU5d+>ZBB&gcnA0v7tw$HA^<9SxNjGzu?{f_I&QE>z*y~TuN%% z773$~!t1Q`59zt?%}wA^pE$=FIyzrC+QGDHa7~-turV!PlF(>qYymX+%7!j`8(;?9dg@MasPC(GCpWIIoE`~^C)dejmjF08e3Ik$@k4G ziKPA$rqvsfVrz5Z0ik!_D&b07iv`S)YRBrJ*LUvb*I19QOqMfG4;lQiY?qXCLn|?! zrJE`1UqX2}>!+rMBI{oBaRd7ZMBGXJkS#CEO}&*I!jzHSzR$A#!f&pDo(7{~VPfT? z@6nzZ%DtMJ;6T0pfUArRiKcc(%Myg6Yb$PaXB_D0 zmzLWUq&QUWy?yuia~ps0;0x1p!;x=)k>}Qp{HL|vYkrdTzU3qBX< zPy9!()^+8>hKl_C1sN7~87^(thlUm&7X9)h^4ZN%SNWHABbLHc!OJy+IlF_;CsFH; zcb*UomN>l?B0j6Nv=t5n{|I*kiOELr>#5Q`Dmf60uZP;Jlt;w4z{oa&N?QecPDc4q zWyP)34BJM*Re6?B&`Gr(3v4zS(8R|ms23EIQ7W`pU^~fRwwPgzdO&#-aSQ`3*MhPp z%6Lu^O28Z_z*xM&9R2V)lv8;@QWelp1u+UBi?cSOOHE))xc^849FeiWbxn)^QVq$o)nQhv(u=|dA?Lt?xkO>MZur|(c6 zYzS9<*#RYIup=K)4h&a*RPPx3>yyQlp-|KY3zne)5O+m}E`(OU40VN;jT~JG8`~>K z*Fo!%9Q_hn4r8bQS|`TPP-yjkvb@L9_0U&3j)p)>M={~sq(FnA@3sOBR9V?9umKwT zL6E9`_EX>vL32^?C2XmZ1Wd336hQeWtQiG<5Mm1ObfrWTrh?=F9HP3!hcLlj0$>Ai zv>8BMdHW1?L9A^CP)}z?0O1gqP5|oZx(O2*%QQd)jFxJEiJ3IShVH@u0a#1 z_rcKuVK9133-_rSO4r9nAZUXHFyN#O5};M3JprccfP>JNuLGh~Y4|csusK8kpHpl# zaboZy;zR=qBJhP-{v`DZmCINLeWRp_(L!}6>eTB_jKS8!qpJ2!8{&n|=m9I3c3*D- zVy!=M6YvQssK)5;hnSq@!1iF($qLH|B zj*4Vz1NZKv5czlmBbo@poko(6<6Yp~OUS?k%rjO_!NhixfjM-aRl2V-lx`E%N%Iu1 z07G(RD9U^?gr87mFceC`L+3V5hVb)=$yRRl^ls-k)_epp_d}3*(|X|~O~4JXF$zAG z>JikV;!JrZst~rL1f~4XbW7%D6_}w2@*Do+Ok;e6B~!sdRoS2Y6IW(25abztpif`H z>PwItKMUC^Xqg9-a|P#0nSmg7)A*d4KSA{|b~CES{eQQMIW2e1eVAKD17tW^9SxuC zsM@`O4oEq4bqCuRAzN2yAc(Ing5ax~^4aSNQ^2`OKu39K8>tqek8HLU;0sv{5X5>K!MA-7 zUuy*Bs-PVG!hs4c1WBU&d(CtDA#|28V8aL2)flg6F`{(Su~=hZsABl$cz^`|_W=@U kfOkBtSg0CWZ49hf|9%Q4W+ertVbn@`QKfa9d0HT6}!y!UIVt#>zh5hnBwWWOg!}te<0UCjWqcjN-Wd2v_Kazj(R&a3a zCVXNJsQ=Bv`M-_h{nt}68bvxJI0CR50vw|Wnv&+f;@PN;ApUxe2mc#j0|}1YG)LzO z`4{Fd{}*m@XP*2|@(1)^#F=gVugm{Zr#PxYHwANa68}qV5>;LM>n-J!L{k%OPwcNLWVvEBrr!csZ{Bt?EB3mx5XZ^Y3o|zm|@_oE{j52u|39 z^n>L;bExWq7~3l6e(WXxGP(d)D*R7p#e+K@s#?-Sptte+xLpfP(tS{4;5g zTvYM-`PP23k-L@q@0Gd5a`PIHo%iLt@Vy#N%&mq}?>baYUE$cT347tbfe9z~yX==4 z=0JqL7+|LoAH!x)xpP3)$wqR46UUGIZPsMqWM zv)vf;Q_L(6gH6QtohI&6%go5yzibq+^1_1unKuepeqoOLl*Sb<@$FkQYfHIt8Nlp~ zcK#3pSbr3|+<4pvFlWp@Q)qt)hH`^r4jm0#3SA17z>v*ywiRFWMp2}+>n@|#&vI4^ z*rHSAOgax{{RAT+kCT3lkoPX%Q6VQ1Ks8h}w=PVRH;-my#ID&YMEV@1^LOMmX!eNq ze003QltCLr9!GI$rf%e#M~lMF<(${SFyNdAXkd(y8cD@dyK>DdV)$f@(>y|D(Jo1P zDPpR)B$$6>oys!#*%b09#h*&(zvL2kMIq$b7S>TmbIpIl7~>yt$-1>G6yd_nj|zGu zE{+<=;x)vO;ABfZKK1gwTp4CPH*Tkvwl*!MR+<~8RZO)uZKhUQlB}Q}wJub^Fymqa zC}Ggpn0BkB+L;DZQ`?#*Q&VGHr*N@JVW@GjDPokN?y3*+b7lut0 z8Rv&>)IIqN_$4spxm-%AXBUP+%r3|PW?uiz1eAtY;uBStlaArnc4loS7cdnMvRW9I zBsKlZ;N14z`a!A;^eKaVRhLY)>N)RtHT~=09og83UA^k!F|4IaIbge-zG8*lsY?xY z?PBO)Ll*UgukWU)s%ufqFEpO{1Iyqo@p?TjmuzZBuV?{%MkqgQuV}8v@r7Z4uJ2BX zOHOMSm$3T55T{|`-8{ZX($`*@gAjv#L;S5C&Q3p-s9m!j>g%BitP4)hsL^yg`>;{w z#kCUruCEx+c9-yRFv?m{Fq{qBOvIQdHt*Jjzf61u#nC@#ECpdRz^P7~gCG`*dKp1n6(g)IY>VD1T64+n0^GQBHgoV%iYibyFMW zKgTTnly7D>d;-U*>lz{0R|I;?cPmzSS(olC5Bp_#8)1-G?@K897e^&<-9=F=&x$M# zpJcs=V;I@)Gbmop4XCzigC%QXA%utMoC7}Tp7=+E%hrC9R`Ba;K{w8`{4Q(0YKYKy98KMS6am6x@ZIZBd>Mkl%*pc);ffDtB zY)`>Uk3SvwWtqFzYY^@^DQl!6swT6q2Puqo!0tCU9Kud%K=|Xoz zDMQ&66`bxDPFlBHhw7xXlVoBT@-pggDTkQ*AXciEl@xqU{iolx_N2nLO$4?Kg$1mI z-{K)5eqp&en^Q9#MPt)YxrpPQrtO8bEbobys3fups1qTrpdhSjhQkisTH^}1$y`9R zB(V*g=CCUH+vbz;1FZD(g_SYzhzgVz_N@ngBw|`gwR7X^V_GPCN8aJ7@lBU2RVOS| zr$gBW!y_QKV#Cc{nMfXMaqK4PXg3v-p(CxPVu&ty<2GyMYJ?TK;agTzWMEX6%9g^3 zZ8qZLh547m@+?W4F&0#qCc3S;Wi6|F;;ic23$%lB5P65!08>}5lHAWEq2&=IWZ_9n zmhuH>UcA<(W@?;EmFYx!&G!5)>Sa!9Yv0o^D3IAbS2m5M)LZ1~5}@giO%O(ymjtbu zc&YMhzHcDv`dc@eQ2Cw3AuNUAs#9tQ!Z&`c2t7A$wpQZQ)#8LFIf6F!M|IhaX4SNj z@@OwWhbj@)24Gf`iW*2IB{vjK416yPJ#5*wmN0ep9>;4I58x2QMGCEqm=W6#rXH{& ziQMgj=F2gmo`VEaA8J<@`f8?NM`{Rd;F`U9lm0cSYiXUKq6U$foXK>L_c7R!ehG2C zxnH>1Dr|e!9_vzA_NH63xU* zyK#UbE&4#T-00gex0)V|xr&-PxuBh++R&)FQ90Q$B>5;eJ^4~td=GMrgJ{v`e&siX z@b$ywbHI5>lSKP()un3zv|ryF)GV6y2U5_hFVZWsD@)L}!VkY8Ye=84;=0me6jwk} z7iYAyk!cf@$Nj+7kF8|mF=0CI+FT#U+9>^Cvhab$N{=4ZbQY{QCTl7(hbskrFBkxs zsIpEZS?3G$6AthW4Xn#i9Oe6>4e3(2(Z_O2egSx)R;$HmPHLm0k43Iq3n6Q;RMbfE z)gVifFHttpEq0ab7M~+-OtbQfs~{LvwVzW_r$QQweTO7f7obzFsm|l=iK+zkTdaLW zu3i^ip;~#MQf?_Ymn*Tes9_%)7R(}PtNAJW8HHa+4=RKwgFuhl-+l9k!*@QUOhl&> zMh8HU_3phuUcTrxqb_{N#FNfi^PT09O^ouE_o=<)Bn!O0Au|8A8vY~!VNK-F8AX;p zI4_QItPHZjZRJVYwo{|lWN>IQr5R(!nWoCBYZ{>2mAteLA0H~4OFCe!pOh!EV|egk zm9&~7^AkaT7vo>>LkC4a5eG4ZPZKRLPykR$7SZil;AD;>moy@rx6Bpnbj~s9thXf- zt+2QkrNe`l(@K|@p6gKACX`EU%`q@>N(QD8OWIXH>XHZ2mlf7J-_fCiJ4E1wl2Z9GKdcHyZdz8 zc?V9jxj(EGJTxO2Qc5+E6}$~HgEw_5%n+ti zFQW>1IrNg%WnUwi7WzyDf&ja`t{Gkqjj2LguZbUVtM`^AOF`3RJT7ysNsF)H)9wk!+`!IuLk3Zy@=FU z+&(SEpaQ2$S?%ASYr(c`^@q{CUf$ zcC11y#)$~s4@=Eey`SujX37*BS5@k}2BnF=W8yXlb^M4m^wN(nJP z~IQ=|8T#fygAqcwwR;8iri9PC>0&=)5TMKkn* zAt|WSz5dywH4znuaKfiajrweXj;l;zr9{3n7u~&L3bRaM*&^$4SB?-LSw@8r++$Qc zwwP+dJ>hYmVF)m^y3(givsLZ21M==nAm$@uvaN+lq(O95rn==D6!69JGi zO`VsN0vC-4!fSq^1yz@qsbi^e3M?&wf@Dct!ZWj+Pq&=D-O z=uJ|mV30JwTsrTOwZRWsc@Mtuo-kr9d3|Z?R$g_Txw-EN#plCggSXza_ zPN84&fyv69kUW^6gv&)aP>3!ziDsrA@9oT)+y;0}+H?wr^^=GHPq5Q2J3CNR z$(>)C)6V7=&*|!P3)q;u$MDQFhNeTlP%d%F;4cn+FxkuowbSb|uRJ@hFr-!v6s{jm$wDXuW5a!zgi06{tU{(WhQVf(O z6M&CvMxI4fIWsDD>ln#hRKK2hE-TQ zUV-yRBP^Xf3D)X?k-HpYK3*<|oR?Xmkg%H!$0nJLCE&3K-L^^lb}G?b>Z+}^uyI~mAg7U*R>F(G&_4?s01ZdsMab%fP{1W+D_V*UQcV5G*GXd!*61mQ>FqK8 z7WniK4L9d|jzkBS&PDS)yWh>Cd&y*BYTrhP3Xw;`XxxCaJ)swdeEO11KfCw!XMJ) zf5W!*EPD8a>qlFFh6xLB_ZaDZGG}Y+Mq`tdj4H9Z%@$BlD-g4Rv+=n$Mx-Lq7ywF{ ze`HX4>)w?EXlIQS#;;yye(p8Ndum_LJ2Vg8FKI84Gd*Ff7AQ4 zFxMq9r1coufG&jGuTTDX_|$YO0jmye4Gh1%y&&C7ueUfY9L?Ng8*I}%aU6J%9m#jZ zJ(Zi-WEPK|5?SPo3zWOeQtsg*W!5950nzI%2TPZJ(yv0i2~9HRi~&ElruO zh!izEC9ROmeLP8Zwp|`_cLbd`;t8Do+&7F80qsF9pxpMAAKuAz%hwDw$9YiQy-S(DI8g71+d!BuZ{cVW;QGZAdoXF`r*zpo;$ip! z3Peo~nwxwjM-gL%#;?6_e%pL-fOeg*HXgT=Ul!jRyNR4sek-}Q12D^{i%=spwX9{)ILBPs7^(#!`7yUFL4c^mhvK1b@gjADExV2Ku> zh(sS)=5GjO8OLe3lP3h%RIM#4t%g&PK%@H$|B82DZ7EJOI? zDV&E#Y>q5`#_Zy21zi&IPiBb-kRZgg;;t94)qZ7%$|$9dMlpgLoyz7`Eq1kD{S`6|ydE877N>7cHD%<0u>>d(bts`$> z!{w?daq+MX@61kda~_CJVemMk_k8rYOd56pWN)p@Y-yt9>^IVx6Fp(EhoP88q#pvI%2*MWm&Jkty=RdSS#f+q$Q zs8eM4`&|#r&c>gbzJAU`x+(jh(WmoYCKU_MoP~`qCC;~ z`{@NGV~(G1;ZgkM(&~G$k@W7Y3<7oms(K!YN1UA-r$Z+7E?*0hj@g(a#y98BPkBs@ zkfpxuveI#}xLI+{N4o&=&W`OfU0zv%sp5-M1>7=f)iD*vS9A$vM^qXu)_I5$WW@<7 z&g$+KTrrr^wdgtJU8y&dh(%WFB8=R*e?!& z*A8)F7fp1jjL2@pbT)<~Qa!c{X9D?uLUgelPQK1HhM*JecnHL*`6&`f&@Wb;g2zru8!MLYWKXf0VuqHoo>Eqqj7 z${Ms3G*@27YC|=LPTLf(mlXJ%PaYOr@>NDqdh)w74T0lZZ9|s1^D*Rh$b^(l?O?#fynMx9~>pcqsJx0LHt z#>5JVBY;*$_G&IG;4DVU5EICj*%~W@ZDkS&nYV}aazzH9+J=P7ndFRPG(xMYLMFXq z9}7@BGTC?>B^EQ&Gg*3Xv^6Y%R2#lO2Ie5n6DZnE%QQn5?ucX3IP=1{l>I3QV{v-h zwG#?F#~-VuhB|_p6|yY>Dbl%_&%9$KKhi}So-ngUi+PFz%yy5YEy=r8>#k0!#zwvR~}DIbb^Y#TfxzcwsXv zV{4ZL_|XW89&+P*?exu_8(K@)Gd7XoL(9^;squ~KYb)A-Y}r$fRb|SOi4h!n5y2MO zrM?i;IsK`%f=TluNc?CTlj_EiJO}4VFOSzB@5(1yb7CW|ffchq4^A%L*?YxLv{V^8 z)DRWRJ;l5Y>&w**>ctKiSU1i=1{hO(M`OGz3(nq#5d0i0ql+fwte34SLF<#}#>Fuz z54-a1vJ&iox=-DL`J;giPdgocMr8v7;z1kN$#02G5nROj>@amOL?C}`u+hT)0wz0S zgfIQ_UZJ-J-)~3k;e@{pZK9&~-{vN@foX4>^_SUynTNesaTbg;o>dwvLzw^K4h1&^ z!pm5Qqqe6LP+R7U$#p2ah@(H? zmyLzhAvwp2m@#<*bAGsx9mnXYU}b{jut?$fdJ&D_A4-0AZ*MBj&A@$V!e@!+D<;wm zRIqL>mhET-$a#m%ke z9ZmTnMkm4i@z2~g;~8)vVPBj zqAe6)>JC8O4oLFiQx`}og!}X2`3_>9!l;>$DukFg!>!u2C&Ks6PB5555O zA>DTMGZ3@}1lz$X_ms+mU<#0lgI?>Q&i9xi2WjTM>lV{m2%>ahc`~Kr6CTjeQ8B+ zXwMJDYGOb=4sWQ2=}I;T3l3nPGSO@g!>fI+O(XsYx~+a_|{k zGpf$-x@+MnRN6frfwP8mDXp)AnBJIOFU4>uhSY_}X0<=w)ugvplQ`m7BoYM($0RuD zAR059bB9?lfApX!&g5NL<6R+-@2Wr2Mtw_KuF1J{r0E))xb|p#Q!fOGK(x5PV8QOL z5agvzftZ)m2Pe%+%diPafma>O!R7)U;=nq|BAb%>LbN?!EU%=GM7OP)rVGVh0)cPlCgNt9JIA?`Z9_awbT%t1a!!H^KDn1h#v``f<;L zna(8okQc^$f?rk#eA|gjT!;kCIofE{8x(Cl4#k)@ris-q{rW9mAZ&#S(xB{Avf4<8 zR>=fNXu=ujxG?`f$jM~_l6#->ufiB<{01jlufwjDT9K&eCl2mT`y}Z7R265{Ui`9z z%oGrBLfox+#V|-h=y=)GRIZ#N~=X7t9xnr2|dHI(A|z^}YmHG%4e(;C{KrM&4!xMjZl{;WLG{d0W? zrkccmd~|3`&R)6zuznfhCNa2QY}15wFKJg}7CjtZwL~>~KD^}G!k?m3p_-0NC8}e| zgih+1z7=IbDR)I`!{V+iXMK^!3MplS;=Tis^9iP>AnS__*r=h3FLtBq3)Ek1L2PUN zF}hEzW*n_F2Cn8hXtCWnD4kKKSsGsP`z$h%^832~MCr=w(=e%Zg zApBBObILEl?-&0^o{pri$MW6w+1TY`sLs8uLD(G?5DX);gePMfzrXY1_oK&{e#C8B z#eI4QS!VAGc{8H!5l*>KPqlMbAy4NvsV1#ylQS5^`}gdHghV)zJ?Iak(=UCr;t!}g z)UHobPs!xXfFea}nJ0EfL4^`SGKWf7NxudNY9ouf%*WVKdbtX0PPGNbo$LIHfV;si`;1eSt&nd=`J6T@wH&&YnOl)mgM z`A^&L($;IR2+CW&IJIR8v33=5%vA#;wxnTU2fn}70X@EHIUF$@bZZlSmjO*F;*0p$ z+fp++ZqhkKjP?@0A)X4@yjP9Q@oQzq{v10VdgY6CXEblRB`RbO7XKE_WXx2Kj!bx~?zLIbTExV+LIkg^!hBOZ)*)K8N*gLIFKWg>c-518`$T+z3~F5I zwxe}G2N2lyvnTi0b4OaO$L65#%cdzt&dfmF+vdX8k{9>obHdP)3_67H%11(s$cZrc zbAw}{Hndp|JG~CfDc^6&9rRIey);+I?plP~Qw<0hmMI(1dkhDATDb1h_dhUYV5;ocuQ<>>qr_R+ zrPHXw95LLF=wSsRwe~2_UBn}2(<;73C{JPzsvA{Og;E=6)dd&%JKnGtE-_QM*0EjY z0LE6tAC1>&#?0DEsWg!2X3IdZtA*voM3#A8zHceY1g*=8b2wDFuB%CzEzz_#q08HD z6+-X~jjz7qsp7DXk#`@X-rGCHyY?_X4%>Q5N~$L{F*RSIG98tq9`Ljs;6t8Qq}v^^ zid855{3teqL?fP+2K&PK;2x4QKk*AAaH7wo6%!WzTcunX7^Bsmc@?Zoid-r<6+nEx^aeN9JH#drozhq#`xI!(tv}4N- zU=Y9bQyKc8z-}NJhPsq-;d+y;w)n()uFo}Pc+>Eo48-WG-x)D%)#C>d1I{e`jvDOq zE)!a3Dsm?HXOGaC581cH4Eqz(wQlWw7;b29j&jW@Zpe*J#>P>6;@`8pQUrX6J6&Iq zb8-0ZeUge;ZuWSip53Ppdk7zVoMcj;T^Nr7h;Z%#;{{$t#|->YuX^p7-Gc&HGXf-) z`0b#!*2XgA%)qRz1|0{M0ArJ3eeoWadHG?*2h}fYWf^h<9r)wI64^s>9K1mR@vJzy zcwCnVa(86~kpUCE;p%}L3WYavq9+%|m~ZI;Fm#0!>$#Qch~b1!LcgY-3o*-m2jg5# zmb&nnVn2;-;AiDfo*+849aSI>(u7J6E}_;Ema<=e#Evhk0L2!;fU>C;5L1OXrPaF${1J+}lPciVW`9~%o-i*#A)-_g-D3f{<+YXa9 zvva^WMDqrb7d_4#m`!{(sE#+Da@-^5r{^AT&Lq76RI+02yQSNaS2jbJL#=YfK+KMV zp>c)m39&1*MqQg3piUYEV2olN)L?#EkF!pH;<}ZWSg1eUtMo+Enen#A@wG*q*z@}V z9Mu-ydY;qM(})}Bg={r!?R9KIG;E4=Cg|79vFy1K z?A5v;I->mr;U)Ook1+CS@?eWzDKmy?Br?85arCe>E8ZZuOfa!4I>AKN8gzass{0W; z(3oZ^c!I}a4`40r?;5%FMd(h@i=wF>)}%05=d-X>7W-Xn*1Q$+qMQYH81ksG0j`Sr8dM;b2f4lG(#dj0UHRh!&4e!7*| zz*4{|#F#Lyan!*|@9C)Jhiug?vHl105A#XWZ}7kNHZo5FO3{Aw)KvgN{Zyt!TwTlf zJ9Zz_>HueiyK9ceU@xpgbbEA+@_unY4f?di6Slu|Uq z$*G+$EPh4>>=x$CBTH2q7P>+A829C`(B3om1os*_X6*(~@6g`4_fEJLb=-s58)PF2 zHBx%5eJaXMz&?wAMq2htUHkT1s}yuqvGleV{@zyOAdRDG1t;;1AHi-w-*DL8?FwEh zAU`7On8>bFYp+_hs)S$EBnFXsR~1=^ z5em@@(p=mQ?AEK|u8f)kY#-F}b`5LL4m8cfhD%*HMDV*(`GFnj z!EaY3ki?PgVizh>P7iGFM1kl4;J3Y-yR-KI z;(d}^{tq&dT)^ zaC>oNOSnOsdLh|Y{U~eCy1{C@4cJHSHQJ;R6{O8rBX3`$4t)V8?qelUZlfvPb<7PT zCou+MT3;iyts9FRULS@AD!#xQAC8WyOX~S{Wcy!Mq zD16|=29k!KF|N}VkPv)E+LViPR%-ruTS7zLOKn+XcUUaM8ROfLO=*W)nvE~YWBQTa z3A}Hwmpz4l1NMD)(Lsb6{A%HmQCl%_;L)A%=PM?3{{wkl;L4^avZP z=;0`63c{htJbwV-G-WtzpB9hlYk#s!$w6LwlD&6Jbn%cqGAQNb94&n6fIa4szd>{= zxWzpV#rj+1?4B6+&nnYAirAwB+Mip9{GZm*KkhUI7n@;Zit1H=F{=9R?B3|T2SoJU z=uo_u={y>w4tpe8cqNWBdD~rde{U0e7v5fZq&_yC;tXX0-0>YsznD-w4hk_xF?*Fa zm)838670#WZv+rJs}yK~4%v z0W%F1RYRExaNIA>wyOIm*(0<<^(6a>{#NWC6`Qygk5cPGicgP+} zL~d)bVwZ@uq<~6L$w2>WxG8QeW)MP84A}Ya5CS_dVR0P2P@@R`TswgqXHozra~8 zrKZF-Kv~tIvL0X7uhooSQD&A*KkR&s+iRc2oJukgu{15C-FYz21b;ZyYeKsOpN&pi zt#tS%)0ND=gNr#S%2tJ6ZpJKRDTp1CA1n{q?icE*y=m?>7FEuQH-0|J-*&Btcfzep z;)v7MDy*jHhYnh_cwjfZ{l9?naZ))T~L}NwSiaPUgtNz;pSH;bh*I%!yH&lh8xA=Y3}7u z04ZZ{tl~74apOaehR|J*7%^4{vG)1B zm8*ltMr^(1^ik@f33e%5F#MSu!)}K00WVV3QaT+mR8d_z(d`iyQGPmFE+iLJD-8!D zf2tL#t;p_3^(cu=PoibkX7*J)`>f5gN2H%})~2^H6Pgl6G+PXN#s1v$9=Z$|if{cQ z#e4wQXQ`mS)`|Ry=qXa#S*6a>9*1L65kZt-X^qmUIWoEHzpZ9aC63m1L+WpN1`txn z^hHrC-8Re9@kKEy{z;fPz0IXq;Qmy(V5M~10Jt+eSJg(|nD#TXVL$H_@F6LAPOqom z){+VX7U<~3(h&s)k@$!xl(2GEEOmafpu43O!B(@ewOFiygV?|)_8(jVU->NRAEl3_0zxVfj;R&??@_wkqW@x}2gw{he2|&nV3-u6Yl~@NM z+Bk3&#|bqFn^{_@tu!}*v8{|tR=dn`MU*mnv>8_jpviB!FnWwNEwSz*D*aZa-HWo) z$%bTn@Y&ZnXPZ(pW!!q+4r%4z0UO&R_eEQNmEQ$mu}BEq(H};y8W(#LjYjbpS9)V8 zCbi{jb|b|M3s^^YBLJhGcd74$H|c~$H9pYn(MX0;_A$I={lm}S8P@1L>pAbZ9-^GI zt?rl@Fn1aP_x-pP-Xp?B5-vIKF!Y!|rfRVTK#KcTt3pGCnCVO6-=R}`as1~{ ze$Ge{N63OOc_^xgAzn@kYY2*p zj9!c}IfCqH_YUbn zdKzN&N_!sX5kBS(_iGe>PfR$=*X)lmlSq=UnawRc3zh#n28I#+=jbqS)GO;nP%wcH z$-f)rlB@hAWEUq4G$S+62H!M0HbevO2LIFY%pcK&y2Qr8vaoL5IztYN0Oy=lqcj#U zVXo3YW{MD%JfE4MR%$6QpPnZP<7PXh0<^-4=i>fvv~b7&&xi~`-h`G|4?H#bA=$DC zJ;$((VkNd76n!=^#?$4a;IK}Fctp%kIW=+^Xq_+7J2Z$?k1}cBAISTg)sJ^ka8ZEq z9PBrd4$JYic6|6Nr11PBfUC$FAs+x%HIslnih0P>_!Ku6zAeKQjABGIj*ylX!s^p} zFCKHGlIg0{K(UxaXN66ZBoh6_RWjFdoIk{ZXYjj%48_G)w0p2j+01ykY2`0^MZ~ZI z0T4;{+SgF0-Ru``kU*QxllhtmVK$>?Tp;$>9A*%);61H1g@C9Pz=zWv2%3}e4E<=t z$RQON5(HskPna2ZOb0QPpyiiyNZY&#R?UC@DDKW=SihA5?c z3x1l+GGL_qD;sC9#b_+*sD@m1r_HlLJaQTV!blec7Uni= zf$$>B8DJe4^6`U!sI!a&TmRTL03Ok11xNJ92jx58UD+NB9)KD9WNZx?8oOAxR6%#Z zvz&R{IM*45cF4eJuKyejHKoKc7lQ=qSqyepyO(|gSx#nV4LipPrj>=Ih2<=x1+B3TY){+G2fnTO)Z!2YkLx4lu5UY{i zVzS`u>dF(~fL+@w=F~GvBx;~%bV|!cQ3)C#bKdE?~OFmk0{OoQ&7p zOCM1xe~P%B)K{DVgn%REWX+Iop#V9s_p9yljKj4(EFkO&CGrF$E)=KC@_6~wBD z94yC&YkP>QO&T$n>58jQ8!;ru2d+7lRB=nq!QUIoC_vTE?9ZuNil8h0F^`JZW7CyR*V%geJuzIH5PAvZ`9$fRWFAvFqI}cZnc>aH z`o;!;ka6&4&#NUYf7&dlO|?#(!OJVaw!vuy{#1YSM&2+B)L0C;QpXwb;EfL`idR=N zCVfkWSrQgb4(NwTgn-i1R;EKl@gEM)Hd?+keI3=}Qn1SOPyby>O;W%!=OtbZxvgjKg>34TIVZZgQ1o zsxmeZy}#iQeIpt(Xx%aD*nz!HN8`Z9r;V~`;B;i%vIe8)A7>Vr81hDuEm}4zvoifV zK0=T;{BvYkG}Ssr{XQQLuh2(c8fk~mscU?eLo?nwclEHg+gaD^$SV!Y@uUm>z|j`4 zp2YJJMdTx}bu;etR00hsd6-{=dNHXgyN-jVjKUOth+yKJ}o=cwsh^YEz%tu%m8 zT7B@3p0R&7)hHOu2rp|mTJOE11IT|aC>v#Tq5as-l#65S?)>+3JvFJ{Lw{hxShzcC z-{u_1T}7>_Ouk7ueXNb7P?>lK5;MVdd@p}f!1`*tXyv1Wfu$9UF$g(BAC?Z#?(ceN zIu4ZI)%L+hOe>Sf6ojZeQuS8;0e3Umq@AoEj=kwqt#89HW7)ep zay4XRIa)ll=oYKp#hILXEpnv-Xc`WPBx=Dc8d9x~+er!d3)~#0OeSPWh1lIHsRZI6gxXadaKYM_tSf z3T_|F=rwfwr|I!6A?K*Lf31(JJC~<4460PAg_>qYf~TShm@Ze?@hYI}70R6cD?8Yn zz47Fi$lTZRZytvZ?MyrIO>QvWN4ayFwL$T&HT(J`5IqhN*dQwkDa+VI@_^<6Sa)%? z<#5uZVV~~x<~5cQy##GQiG_awHwAgXqekP;lV)Ld&)>=TpgHkH^9BEf`uJpymgz&j zky-^U%lm0lFSUzt3q63$wF1zB=*+TQc!YJCE_8&u!30^^k~B-G!l!qMI=qv_OCj-D ztWh7v=00#d6-5-LgSc}NW?mZr`+Fk7B+(yIdR&GqG;qj&xDPSydBoLi6Kp{)Tb99r zx~3T=QL}Q0yucWk3GX4v zmR94ffj~U5>dB1gSfbSw0MEz~_j?U&fqgOc+eii61HYOtF>4*zQ(GxC4-FTWs$yJo z-zW2MCR@k3vVNK{%)PsJH)VyHRtHvQJ5uHgCHozn`TnByk`M&cJ*eGD^=%{e+=-*I zZ>Ibs8tc?pf(0-F4+oW43VkfPfAZj~R%03a|oNh1V*5TACQZKmLQ5CCR zZ+Q3>fpfe+0yEHQ=-0ggr@e^sdlw>&GrhZpu584LHM>F8qc)HBAjLcFp$;I!><616 zGM-?iYIv9hcJNjdB}M#TXO7`{I^Whh^3~~vddk8;~P<=N6GWx>iW`jXt3QqFFklIVug-!i1|!mqBEt;{}mx=cN2s zujsEAD#Rp#eEq;8??8CfWSFhB3wwmH4CCaP0a-xnqf%pu7rMyS;Vz{Il_dQdo__^9 z!C1x#l_9QU4v;pmBj_s3bqH6(o_EoFs6smp_ono~H4ih+-o0tj_th-t|CDj<@lfS$ z{QQ1q$e0Ub292@wW@$vZC6^*gp9pT&zer z*JK*!SXtKb?DB}lu?+`YFUeu);bD3~V$`&!O)c5F$?Umf&-b3B{du`$RGK6n?9a68 zIB|CO@`w62*~^Z4pZMwNjVta_>4W-`9CCP0_|b#$cWat6X83ko{QcXO-xr>CeAE*5 z?Mr6T*w&F3vzzw3s_5xT$V(me;EX=Re!r(`ooXpERr{`T5@G% zg^bhRxW3a)o_yhQQI%meKBN8&N1`aYMk+jBHD|18v=klQUNB=xczq35QVy8}%?S72 zy@lT0XSQG(u$Zx+&>UVIig{+0JLD=lAGkN2am|r-&6JjR%3n6N(YIK z>uxlc5YO;8r-SctBM+o(cxSHve07R{Q1;b%vr?KCXU8zM9I6e-=F?mjdft88O>@~} zR%qo@VY%0AaEkpZ&*&XuZF~B@SGn*Y{`Qofgcl?|VWu(vixi%I*B(35UoG1{bI>Nbu2{A&Pb!HD7rhA%d4U&} zN(ypgZph4M#?Otm2$dS!#$U({`A#Yd?i9-WFWIy5q|s5Gl1|=C2bM$O*HU|#KWXn} z8@M{^y`)C*(nHI^q1ZoEw!D$hvekFA@3JVpgddMSw&*t-M{(94_X9RKS+RnDKKG(5 zuWdVHM{DEpDNAb2ed7Jo!fJ1iYS!Y*D{Jfywe&gXdi3VqH8yb=c3QOCqwjR{<=D!sgC)4`3q|%-LNsW7u!CU0LUC1gZj`+^GuGHtbvq8qZ z+L(f@_HX~ZSGt_J`KTz(?XE#oX8aA`%=nv*wTWwfZ-;iZn@{9*U0&(vJWDS_NZ<$J zg+%(GkjUU?=C(0vbK5j)BR3yucintGBKPq>D{YQ%X_6dqxbm-GUkW_Jap}6^H2o8C9*rGK){mSOyLs^=c)#F}9xst< zjrk3p3LRT!^_G)&t{so9xQ$nNz3#_bog3Q=s%)cTt&Q*8d#=@W=9YI%<$-|5|9QWy ztlF^fziZ(esd*&N;HS*@M+2-+#U3n|{?(g-4|~MbeY07=dGC?#O|8V$)%i^k_&|$Z zQr*o0n{~ETSb)*BzM+-L)2e2~M%bDe*5b76f1VThXR@=>VCEW^st3Y__@G024qje< zXTz+%ph0KHv3h?$y`Bq~ITqra0owj<`^su>-dEAOK^t|BM?Nev(I=o+Kb&J(!L-ZT>+dXL zuQ#X?R7gs0$-K7>3r6lq62w8-`AjE#dJ&%2p}*K*NNequrLWHiT^&l;pjBDn)9|7s zV^?mDbqis7n-kahmr*q1n~a41wrztuWe@5{`HRz6+$d_BliMgtHgG#6E)DG+_V{9{ zpVpL-2A%VCFAVF-!LZ4)IYc@OxFFpTr3%Pd7GM&GbRnN)uz@vA1rV-WV2`XgE|`PJ zl&}kt&x3Sgn;ztm9bDj#$cHIi92G#WG6d8wPL*OOhv({#ll!?)lW^ujT@sjpSS^IA zBM1s*5P4jvNB(9G#ZSgv`^0zzLNimW==&;gbw_B%>Jk zjccEbH>*!(odadUNmb3r^m=d?@rcknU@j6#Ss)&->hTEBiC{hykj;01S|3NLo1+?D zgW)bYEknvNcm*@4-N*n=5 z+lC-VKoH{Tj*fq|gzqSrk9-G4fsd*N@n{qTBg^&!2uIcrAAlHH-5K9!qU#=-!iHx1_Yh*luA*j5B0R_ZT07WQz7l7diXaUe0`79v} zL{>7S;+0PuL7@WT9fVdNhY%3%8gLfk#c4oPnYgDhUXie&!SU(#(VztJdT4NbI#0Sf zBA*UdBb2TQ)iY^Q?JCujh-ytWZ<-by-$#lT{05;NN}sB~9yZmVWD2xJK+Y7n6i(OhLXOZ5V~ZsBL&5Um-(1w1T1DRj3YJhIl19YM*KmmP~39s{VqQ>e;R^sY0q= zge+hDKJwA5N4L9fG8JK%c_4;aPNLTB zLe#Kiz#-0XAybw5$1vL+Z8QusVPTlnB))qg;x`lmuI^I5&(?iipPFv_Swx}kCENOQ zO2zUdpTj~7Yo=Zv){`>#7c0YD(F!+F`-e?+O3w@;sUEP1YdrM|88tGHy!F= zqDRP>I;_z8&IF7)wH655t;BR2CScT|H8N8^%Bj}7d{Z?rjIZ_iDvKX}PHZ%Q=-onOP!_Cjn}F3&9@VbdSd5JrVAwqPd2N2r z1U_}b(Tj%gFr;!-_aZF85SppdOzgsN;s;FjMoHxpb<|4$ZQ_|S19*$v)TN(^mhNr@ S1t5_KF@h$VC*D&nVgCaoNidE8 From 3d21fd250f482bf7bd3529a647b781262100bf95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 12 Sep 2024 16:22:32 +0800 Subject: [PATCH 067/124] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=96=87=E6=9C=AC=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SalaryBillServiceImpl.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java index 060f15cb2..4df8aa8f2 100644 --- a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java @@ -54,6 +54,7 @@ import weaver.hrm.User; import java.io.File; import java.lang.reflect.InvocationTargetException; import java.math.BigDecimal; +import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; @@ -377,9 +378,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService String remarkI18n = SalaryI18nUtil.getI18nLabel(140036, "发放说明"); if (StringUtils.isNotEmpty(salaryTemplate.getTextContent())) { - String yearI18n = SalaryI18nUtil.getI18nLabel(100325, "年"); - String monthI18n = SalaryI18nUtil.getI18nLabel(100326, "月"); - salaryTemplate.setTextContent(salaryTemplate.getTextContent().replace("${salaryMonth}", salaryMonth.getYear() + yearI18n + salaryMonth.getMonth() + monthI18n)); + salaryTemplate.setTextContent(salaryTemplate.getTextContent().replace("${salaryMonth}", new SimpleDateFormat("yyyy年MM月").format(salaryMonth))); } // 工资单水印设置 From d70e63e787ae53eac6365687f631a496f303419b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 12 Sep 2024 17:07:52 +0800 Subject: [PATCH 068/124] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=B7=A5=E8=B5=84?= =?UTF-8?q?=E5=8D=95=E4=BF=9D=E5=AD=98=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/salaryitem/SalaryItemMapper.xml | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml index 21df577c4..693e9f222 100644 --- a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml +++ b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml @@ -409,12 +409,12 @@ update_time, creator, delete_type, tenant_key, data_type, shared_type, tax_agent_ids) VALUES - (#{item_id},#{item_name}, #{item_code}, #{item_systemType}, #{item_sysSalaryItemId}, - #{item_useDefault}, #{item_useInEmployeeSalary}, #{item_roundingMode}, - #{item_pattern}, - #{item_valueType}, #{item_formulaId}, #{item_description}, #{item_canEdit}, - #{item_createTime}, #{item_updateTime}, #{item_creator}, 0, #{item_tenantKey}, #{item_dataType}, - #{item_sharedType}, #{item_taxAgentIds}) + (#{item.id},#{item.name}, #{item.code}, #{item.systemType}, #{item.sysSalaryItemId}, + #{item.useDefault}, #{item.useInEmployeeSalary}, #{item.roundingMode}, + #{item.pattern}, + #{item.valueType}, #{item.formulaId}, #{item.description}, #{item.canEdit}, + #{item.createTime}, #{item.updateTime}, #{item.creator}, 0, #{item.tenantKey}, #{item.dataType}, + #{item.sharedType}, #{item.taxAgentIds}) @@ -425,27 +425,27 @@ select - #{item_id,jdbcType=DOUBLE}, - #{item_name,jdbcType=VARCHAR}, - #{item_code,jdbcType=VARCHAR}, - #{item_systemType,jdbcType=INTEGER}, - #{item_sysSalaryItemId,jdbcType=DOUBLE}, - #{item_useDefault,jdbcType=INTEGER}, - #{item_useInEmployeeSalary,jdbcType=INTEGER}, - #{item_roundingMode,jdbcType=INTEGER}, - #{item_pattern,jdbcType=INTEGER}, - #{item_valueType,jdbcType=INTEGER}, - #{item_formulaId,jdbcType=DOUBLE}, - #{item_description,jdbcType=VARCHAR}, - #{item_canEdit,jdbcType=INTEGER}, - #{item_createTime,jdbcType=DATE}, - #{item_updateTime,jdbcType=DATE}, - #{item_creator,jdbcType=DOUBLE}, + #{item.id,jdbcType=DOUBLE}, + #{item.name,jdbcType=VARCHAR}, + #{item.code,jdbcType=VARCHAR}, + #{item.systemType,jdbcType=INTEGER}, + #{item.sysSalaryItemId,jdbcType=DOUBLE}, + #{item.useDefault,jdbcType=INTEGER}, + #{item.useInEmployeeSalary,jdbcType=INTEGER}, + #{item.roundingMode,jdbcType=INTEGER}, + #{item.pattern,jdbcType=INTEGER}, + #{item.valueType,jdbcType=INTEGER}, + #{item.formulaId,jdbcType=DOUBLE}, + #{item.description,jdbcType=VARCHAR}, + #{item.canEdit,jdbcType=INTEGER}, + #{item.createTime,jdbcType=DATE}, + #{item.updateTime,jdbcType=DATE}, + #{item.creator,jdbcType=DOUBLE}, 0, - #{item_tenantKey,jdbcType=VARCHAR}, - #{item_dataType,jdbcType=VARCHAR}, - #{item_sharedType,jdbcType=INTEGER}, - #{item_taxAgentIds,jdbcType=VARCHAR} + #{item.tenantKey,jdbcType=VARCHAR}, + #{item.dataType,jdbcType=VARCHAR}, + #{item.sharedType,jdbcType=INTEGER}, + #{item.taxAgentIds,jdbcType=VARCHAR} from dual @@ -456,12 +456,12 @@ rounding_mode, pattern, value_type, formula_id, description, can_edit, create_time, update_time, creator, delete_type, tenant_key, data_type, shared_type, tax_agent_ids) VALUES - (#{item_id},#{item_name}, #{item_code}, #{item_systemType}, #{item_sysSalaryItemId}, - #{item_useDefault}, #{item_useInEmployeeSalary}, #{item_roundingMode}, - #{item_pattern}, - #{item_valueType}, #{item_formulaId}, #{item_description}, #{item_canEdit}, - #{item_createTime}, #{item_updateTime}, #{item_creator}, 0, #{item_tenantKey}, #{item_dataType}, - #{item_sharedType}, #{item_taxAgentIds}) + (#{item.id},#{item.name}, #{item.code}, #{item.systemType}, #{item.sysSalaryItemId}, + #{item.useDefault}, #{item.useInEmployeeSalary}, #{item.roundingMode}, + #{item.pattern}, + #{item.valueType}, #{item.formulaId}, #{item.description}, #{item.canEdit}, + #{item.createTime}, #{item.updateTime}, #{item.creator}, 0, #{item.tenantKey}, #{item.dataType}, + #{item.sharedType}, #{item.taxAgentIds}) @@ -479,8 +479,8 @@ - - when id=#{item_id} then #{item_sortedIndex} + + when id=#{item.id} then #{item.sortedIndex} @@ -488,7 +488,7 @@ where id in - #{item_id} + #{item.id} From c212a2782f35f4ff413da57618249c8fddd01348 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 13 Sep 2024 14:54:52 +0800 Subject: [PATCH 069/124] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=A2=9E=E5=8A=A0=E5=B2=97=E4=BD=8D=E7=AD=9B?= =?UTF-8?q?=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryAcctEmployeeServiceImpl.java | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index 621b2b068..7ca1a1f4d 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -712,19 +712,20 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct // } // list = list.stream().filter(po -> employeeIdsByGradeFilter.contains(po.getEmployeeId())).collect(Collectors.toList()); // } -// // 岗位过滤 -// if (CollectionUtils.isNotEmpty(param.getPosition())) { -// Set employeeIdsByPostionFilter = new HashSet<>(); -// simpleEmployeeList.forEach(simpleEmployee -> { -// if (simpleEmployee.getPosition() != null && param.getPosition().contains(simpleEmployee.getPosition().getId())) { -// employeeIdsByPostionFilter.add(simpleEmployee.getEmployeeId()); -// } -// }); -// if (CollectionUtils.isEmpty(employeeIdsByPostionFilter)) { -// return Lists.newArrayList(); -// } -// list = list.stream().filter(po -> employeeIdsByPostionFilter.contains(po.getEmployeeId())).collect(Collectors.toList()); -// } + // 岗位过滤 + List position = param.getPosition(); + if (CollectionUtils.isNotEmpty(position)) { + // Set employeeIdsByPostionFilter = new HashSet<>(); + // simpleEmployeeList.forEach(simpleEmployee -> { + // if (simpleEmployee.getPosition() != null && param.getPosition().contains(simpleEmployee.getPosition().getId())) { + // employeeIdsByPostionFilter.add(simpleEmployee.getEmployeeId()); + // } + // }); + // if (CollectionUtils.isEmpty(employeeIdsByPostionFilter)) { + // return Lists.newArrayList(); + // } + employeeList = employeeList.stream().filter(emp -> position.contains(emp.getJobtitleId())).collect(Collectors.toList()); + } // 人事状态过滤 if (CollectionUtils.isNotEmpty(param.getStatus())) { Set employeeIdsByStatus = new HashSet<>(); From 31d2994a9ac2e16c381974f01b9a164a1b4f073b Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Sat, 14 Sep 2024 10:30:32 +0800 Subject: [PATCH 070/124] =?UTF-8?q?=E6=B5=AE=E5=8A=A8=E8=96=AA=E9=85=AC?= =?UTF-8?q?=E5=A4=9A=E8=AF=AD=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/VariableArchiveServiceImpl.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java b/src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java index 0018859a9..b008273c6 100644 --- a/src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java @@ -134,7 +134,13 @@ public class VariableArchiveServiceImpl extends Service implements VariableArchi //排序配置 OrderRuleVO orderRule = getSalarySysConfService(user).orderRule(); queryParam.setOrderRule(orderRule); - return getVariableArchiveMapper().list(queryParam); + return listDTO(queryParam); + } + + public List listDTO(VariableArchiveQueryParam queryParam) { + List list = getVariableArchiveMapper().list(queryParam); + SalaryI18nUtil.i18nList(list); + return list; } /** @@ -256,7 +262,7 @@ public class VariableArchiveServiceImpl extends Service implements VariableArchi return Collections.emptyMap(); } - List variableArchiveList = getVariableArchiveMapper().list(queryParam); + List variableArchiveList = listDTO(queryParam); // 获取所有浮动薪酬项目 List variableItems = getVariableItemService(user).listAll(); From eefd4d1795052991150d0b585c5e50a661e0b7be Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Sat, 14 Sep 2024 15:33:31 +0800 Subject: [PATCH 071/124] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=B2=97=E4=BD=8D=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/report/entity/bo/SalaryStatisticsReportBO.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java index 59abb699b..9ad7fb2fc 100644 --- a/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java +++ b/src/com/engine/salary/report/entity/bo/SalaryStatisticsReportBO.java @@ -129,7 +129,9 @@ public class SalaryStatisticsReportBO { param.setDepart(((List) JSON.parseArray(po.getDepartSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); } // param.setGrade(((List) JSON.parseArray(po.getGradeSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); -// param.setPosition(((List) JSON.parseArray(po.getPositionSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); + if (po.getPositionSetting() != null) { + param.setPosition(((List) JSON.parseArray(po.getPositionSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); + } if (po.getStatusSetting() != null) { param.setStatus(((List) JSON.parseArray(po.getStatusSetting(), Map.class)).stream().map(m -> m.get(key).toString()).collect(Collectors.toList())); } From 09042321d1ec8313fba4b957ca31584d5cdad19c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 18 Sep 2024 15:59:36 +0800 Subject: [PATCH 072/124] =?UTF-8?q?1=E3=80=81=E6=94=AF=E6=8C=81=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E7=8F=AD=E6=AC=A1=E4=BF=A1=E6=81=AF=202=E3=80=81?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E8=80=83=E5=8B=A4=E5=8A=9F=E8=83=BD=E4=BC=98?= =?UTF-8?q?=E5=8C=96=EF=BC=8Cexcel=E5=88=97=E5=92=8C=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E4=BF=9D=E6=8C=81=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datacollection/bo/AttendQuoteDataBO.java | 4 ++ .../AttendQuoteFieldMapper.java | 6 +++ .../datacollection/AttendQuoteFieldMapper.xml | 4 ++ .../remote/attend/entity/Attend4Salary.java | 5 +++ .../impl/RemoteAttend4SalaryServiceImpl.java | 34 ++++++++++++++-- .../impl/AttendQuoteDataServiceImpl.java | 40 ++++++++++++++----- 6 files changed, 79 insertions(+), 14 deletions(-) diff --git a/src/com/engine/salary/entity/datacollection/bo/AttendQuoteDataBO.java b/src/com/engine/salary/entity/datacollection/bo/AttendQuoteDataBO.java index 144ed4c0e..5b67306ca 100644 --- a/src/com/engine/salary/entity/datacollection/bo/AttendQuoteDataBO.java +++ b/src/com/engine/salary/entity/datacollection/bo/AttendQuoteDataBO.java @@ -36,6 +36,10 @@ public class AttendQuoteDataBO { continue; } String key = field.getCode(); + //兼容出勤班次的key + if(key.startsWith("attendanceSerial_")){ + key = key.replace("attendanceSerial_", ""); + } if (m.containsKey(key)) { Map map = new LinkedHashMap<>(); map.put("employeeId", m.get("resourceId")); diff --git a/src/com/engine/salary/mapper/datacollection/AttendQuoteFieldMapper.java b/src/com/engine/salary/mapper/datacollection/AttendQuoteFieldMapper.java index 9392a59f0..01a4f6be6 100644 --- a/src/com/engine/salary/mapper/datacollection/AttendQuoteFieldMapper.java +++ b/src/com/engine/salary/mapper/datacollection/AttendQuoteFieldMapper.java @@ -104,4 +104,10 @@ public interface AttendQuoteFieldMapper { * @return */ List listSome(@Param("param") AttendQuoteFieldPO param); + + /** + * 获取出勤班次 + * @return + */ + List getAttendanceSerials(); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/datacollection/AttendQuoteFieldMapper.xml b/src/com/engine/salary/mapper/datacollection/AttendQuoteFieldMapper.xml index 4c1ae10ee..38ad1cf90 100644 --- a/src/com/engine/salary/mapper/datacollection/AttendQuoteFieldMapper.xml +++ b/src/com/engine/salary/mapper/datacollection/AttendQuoteFieldMapper.xml @@ -486,4 +486,8 @@ + + \ No newline at end of file diff --git a/src/com/engine/salary/remote/attend/entity/Attend4Salary.java b/src/com/engine/salary/remote/attend/entity/Attend4Salary.java index 701d82f69..39703a559 100644 --- a/src/com/engine/salary/remote/attend/entity/Attend4Salary.java +++ b/src/com/engine/salary/remote/attend/entity/Attend4Salary.java @@ -26,4 +26,9 @@ public class Attend4Salary { private List onlyEmpIds; private Map extendParam; + + /** + * 出勤班次 + */ + private String attendanceSerial; } diff --git a/src/com/engine/salary/remote/attend/service/impl/RemoteAttend4SalaryServiceImpl.java b/src/com/engine/salary/remote/attend/service/impl/RemoteAttend4SalaryServiceImpl.java index 99553f193..95e1618ac 100644 --- a/src/com/engine/salary/remote/attend/service/impl/RemoteAttend4SalaryServiceImpl.java +++ b/src/com/engine/salary/remote/attend/service/impl/RemoteAttend4SalaryServiceImpl.java @@ -4,12 +4,15 @@ import com.alibaba.druid.support.json.JSONUtils; import com.alibaba.fastjson.JSONObject; import com.engine.core.impl.Service; import com.engine.kq.cmd.report.GetKQReportCmd; +import com.engine.salary.mapper.datacollection.AttendQuoteFieldMapper; import com.engine.salary.remote.attend.cmd.GetSearchListCmd; import com.engine.salary.remote.attend.entity.Attend4Salary; import com.engine.salary.remote.attend.service.RemoteAttend4SalaryService; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.valid.ValidUtil; +import com.google.common.base.Joiner; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -26,15 +29,22 @@ import java.util.stream.Collectors; public class RemoteAttend4SalaryServiceImpl extends Service implements RemoteAttend4SalaryService { private final Boolean isLog = "true".equals(new BaseBean().getPropValue("hrmSalary", "log")); + private AttendQuoteFieldMapper getAttendQuoteFieldMapper() { + return MapperProxyFactory.getProxy(AttendQuoteFieldMapper.class); + } + @Override public List> getColumns() { + + //兼容获取班次信息字段 + List attendanceSerials = getAttendQuoteFieldMapper().getAttendanceSerials(); + String attendanceSerial = Joiner.on(",").join((Iterable) attendanceSerials); + Map paramsMap = new HashMap(); -// paramsMap.put("pageIndex", 1); -// paramsMap.put("pageSize", 10); paramsMap.put("typeselect", "3"); paramsMap.put("viewScope", "0"); paramsMap.put("isNoAccount", "1"); - paramsMap.put("attendanceSerial", ""); + paramsMap.put("attendanceSerial", attendanceSerial); paramsMap.put("isFromMyAttendance", "1"); Map temp = new HashMap(); temp.put("data", JSONObject.toJSONString(paramsMap)); @@ -60,6 +70,21 @@ public class RemoteAttend4SalaryServiceImpl extends Service implements RemoteAtt }); } } + //出勤班次 + else if (dataIndex.equals("attendanceSerial") && column.get("children") != null) { + List list = (List) column.get("children"); + if (CollectionUtils.isNotEmpty(list)) { + list.stream() + .filter(leave -> leave.get("dataIndex") != null && StringUtils.isNotBlank(leave.get("dataIndex").toString())) + .forEach(leave -> { + Map map = Maps.newHashMapWithExpectedSize(2); + map.put("code", "attendanceSerial_" + leave.get("dataIndex").toString()); + String unit = "".equals(leave.get("unit").toString()) ? "" : "(" + leave.get("unit").toString() + ")"; + map.put("name", Util.null2String(column.get("title")) + "-" + leave.get("title") + unit); + columns.add(map); + }); + } + } //加班 else if (dataIndex.equals("overtime") && column.get("children") != null) { List list = (List) column.get("children"); @@ -121,7 +146,8 @@ public class RemoteAttend4SalaryServiceImpl extends Service implements RemoteAtt List resourceIds = attend4Salary.getOnlyEmpIds().stream().map(String::valueOf).collect(Collectors.toList()); paramsMap.put("resourceId", String.join(",", resourceIds)); paramsMap.put("isNoAccount", "1"); - paramsMap.put("attendanceSerial", ""); + //班次 + paramsMap.put("attendanceSerial", attend4Salary.getAttendanceSerial()); paramsMap.put("isFromMyAttendance", "1"); Map temp = new HashMap(); temp.put("data", JSONObject.toJSONString(paramsMap)); diff --git a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java index 1771b6c09..750f11ec2 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java @@ -70,6 +70,7 @@ import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.file.ImageFileManager; import weaver.general.BaseBean; +import weaver.general.Util; import weaver.hrm.User; import weaver.wechat.util.Utils; @@ -131,7 +132,6 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa } - private RemoteAttend4SalaryService getRemoteAttend4SalaryService(User user) { return ServiceUtil.getService(RemoteAttend4SalaryServiceImpl.class, user); } @@ -250,6 +250,16 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa // 获取最终结果 List> listMaps = getListMaps(attendQuoteDataBases); + + //当前引用的值 + List effectiveColumns = listMaps.stream() + .map(Map::keySet) + .max(Comparator.comparingInt(Set::size)) + .orElse(new HashSet<>()) + .stream() + .map(key -> key.split("_")[0]) + .collect(Collectors.toList()); + // 1.工作簿名称 String sheetName = SalaryI18nUtil.getI18nLabel(93931, "考勤数据"); List header = new ArrayList<>(); @@ -258,10 +268,16 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa header.add(SalaryI18nUtil.getI18nLabel(86186, "手机号")); header.add(SalaryI18nUtil.getI18nLabel(86317, "工号")); // 动态列 + List effectiveFields = new ArrayList<>(); if (CollectionUtils.isNotEmpty(listMaps)) { - for (AttendQuoteFieldPO attendQuoteField : attendQuoteFields) { - header.add(attendQuoteField.getFieldName()); - } + effectiveFields = attendQuoteFields.stream() + .filter(attendQuoteField -> effectiveColumns.contains(Util.null2String(attendQuoteField.getId()))) + .collect(Collectors.toList()); + + effectiveFields.forEach(attendQuoteField -> { + header.add(attendQuoteField.getFieldName()); + } + ); } List> rows = new ArrayList<>(); @@ -276,7 +292,7 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa row.add(dto.get("jobNum")); // 动态列 - for (AttendQuoteFieldPO attendQuoteField : attendQuoteFields) { + for (AttendQuoteFieldPO attendQuoteField : effectiveFields) { Object o = dto.get(attendQuoteField.getId().toString() + "_attendQuoteData"); try { if (o != null && NumberUtil.isNumber(o.toString())) { @@ -509,13 +525,17 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa attend4Salary.setBeginDate(attendCycleRange.getFromDate()); attend4Salary.setEndDate(attendCycleRange.getEndDate()); attend4Salary.setOnlyEmpIds(part); + //班次信息 + String attendanceSerial = attendQuoteFields.stream() + .filter(f -> f.getCode() != null && f.getCode().startsWith("attendanceSerial_")) + .map(f -> f.getCode().replace("attendanceSerial_", "")) + .collect(Collectors.joining(",")); + attend4Salary.setAttendanceSerial(attendanceSerial); + List> attendResult = getRemoteAttend4SalaryService(user).getDatas(attend4Salary); AttendQuoteDataBO.buildAttendDataFromRemote(attendResult, attendQuoteFields, attendQuoteSyncData); -// attend4Salary.setUnit("day"); -// attendResult = remoteAttend4SalaryService.getWorkTimeSummary(attend4Salary); -// log.info("考勤数据[按天]:{}", JSONUtils.toJSONString(attendResult.getData())); -// AttendQuoteDataBO.buildAttendDataFromRemote("day", attendResult.getData(), attendQuoteFields, attendQuoteSyncData); + } } catch (Exception e) { log.error("salaryAttend获取考勤数据错误失败:{}", String.format("参数:%s,错误信息:%s", JSONObject.toJSONString(attend4Salary), e.getMessage()), e); @@ -663,7 +683,7 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa String confValue = (salarySysConfPO != null && salarySysConfPO.getConfValue() != null && !"".equals(salarySysConfPO.getConfValue())) ? salarySysConfPO.getConfValue() : "0"; // 获取租户下所有的人员 - List employees = getSalaryEmployeeService(user).listAll(UseEmployeeTypeEnum.ALL); + List employees = getSalaryEmployeeService(user).listAll(UseEmployeeTypeEnum.ALL); // 获取已设置的可同步的考勤字段 List attendQuoteFields = getAttendQuoteSetFields(AttendQuoteSourceTypeEnum.IMPORT); // 生成获取考勤引用 From 58012fe1e16d8ee37a52a8227b3022e2ebb65cb2 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 18 Sep 2024 16:44:02 +0800 Subject: [PATCH 073/124] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=A4=BE=E4=BF=9D?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=A1=A3=E6=A1=88=E8=A1=A5=E7=BC=B4=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SIBalanceServiceImpl.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/service/impl/SIBalanceServiceImpl.java b/src/com/engine/salary/service/impl/SIBalanceServiceImpl.java index bb0c776b3..4b7750224 100644 --- a/src/com/engine/salary/service/impl/SIBalanceServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIBalanceServiceImpl.java @@ -172,7 +172,9 @@ public class SIBalanceServiceImpl extends Service implements SIBalanceService { Map socialComMap = JSON.parseObject(socialSchemePO.getSocialPaymentComBaseString(), new HashMap().getClass()); List socialIds = new ArrayList<>(); socialIds.addAll(socialMap.keySet()); - socialIds.addAll(socialComMap.keySet()); + if (socialComMap != null) { + socialIds.addAll(socialComMap.keySet()); + } socialIds = socialIds.stream().distinct().collect(Collectors.toList()); //查询该福利方案下开启缴纳的福利项 List insuranceIdAndScopeList = payInsuranceIdAndScopeList(socialSchemePO.getSocialSchemeId()); @@ -213,7 +215,9 @@ public class SIBalanceServiceImpl extends Service implements SIBalanceService { Map fundComMap = JSON.parseObject(fundSchemePO.getFundPaymentComBaseString(), new HashMap().getClass()); List fundIds = new ArrayList<>(); fundIds.addAll(fundMap.keySet()); - fundIds.addAll(fundComMap.keySet()); + if (fundComMap != null) { + fundIds.addAll(fundComMap.keySet()); + } fundIds = fundIds.stream().distinct().collect(Collectors.toList()); //查询该福利方案下开启缴纳的福利项 List insuranceIdAndScopeList = payInsuranceIdAndScopeList(fundSchemePO.getFundSchemeId()); @@ -254,7 +258,9 @@ public class SIBalanceServiceImpl extends Service implements SIBalanceService { Map otherComMap = JSON.parseObject(otherSchemePO.getOtherPaymentComBaseString(), new HashMap().getClass()); List otherIds = new ArrayList<>(); otherIds.addAll(otherMap.keySet()); - otherIds.addAll(otherComMap.keySet()); + if (otherComMap != null) { + otherIds.addAll(otherComMap.keySet()); + } otherIds = otherIds.stream().distinct().collect(Collectors.toList()); //查询该福利方案下开启缴纳的福利项 List insuranceIdAndScopeList = payInsuranceIdAndScopeList(otherSchemePO.getOtherSchemeId()); From a59448e4543ea8f0c58005ce364ae9b57160a848 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 18 Sep 2024 18:24:08 +0800 Subject: [PATCH 074/124] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=BA=E5=8A=9B?= =?UTF-8?q?=E8=B5=84=E6=BA=90=E5=88=A0=E9=99=A4=E6=95=B0=E6=8D=AE=E5=BD=B1?= =?UTF-8?q?=E5=93=8D=E5=88=97=E8=A1=A8=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java index 17d1d9f53..50b6d10a5 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java @@ -256,7 +256,10 @@ public class SalaryArchiveItemWrapper extends Service implements SalaryArchiveIt List listResult = getSalaryArchiveItemService(user).salaryItemAdjustRecordList(queryParam, salaryItemIds); listResult = listResult.stream() .filter(r -> { - DataCollectionEmployee employee = employeeMap.getOrDefault(r.getEmployeeId(), new DataCollectionEmployee()); + DataCollectionEmployee employee = employeeMap.get(r.getEmployeeId()); + if (employee == null) { + return false; + } String username = queryParam.getUsername(); List departmentIds = queryParam.getDepartmentIds(); List positionIds = queryParam.getPositionIds(); From 91863b901f76ab645004e849be967b0f90e75070 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 19 Sep 2024 14:17:47 +0800 Subject: [PATCH 075/124] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SalaryAcctCalculateServiceImpl.java | 1 + .../salary/service/impl/SalaryAcctResultServiceImpl.java | 7 ++++--- src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java | 1 + 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index 6685a0d9f..c7cce5da7 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -116,6 +116,7 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc @Override public void calculate(SalaryAcctCalculateBO salaryAcctCalculateBO, DataCollectionEmployee simpleEmployee, List salarySobBackItems) { + log.info("开始核算V3 {}", salaryAcctCalculateBO); StopWatch sw = new StopWatch("核算耗时明细,id:" + salaryAcctCalculateBO.getSalaryAcctRecordPO().getId() + ""); Date now = new Date(); try { diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index d942cdcc9..8019268ee 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -768,8 +768,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe @Override public void calculate(SalaryAcctCalculateParam calculateParam, DataCollectionEmployee simpleEmployee) { - StopWatch stopWatch = new StopWatch("总核算耗时,id:" + calculateParam.getSalaryAcctRecordId()); try { + log.info("开始核算V2 {}", calculateParam); + StopWatch stopWatch = new StopWatch("总核算耗时,id:" + calculateParam.getSalaryAcctRecordId()); stopWatch.start("数据准备"); // 1、查询薪资核算记录 SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(calculateParam.getSalaryAcctRecordId()); @@ -855,8 +856,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe getSalaryAcctProgressService(user).initProgress(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId(), initProgress); // 12、对薪资核算人员进行拆分 String personNumberInOneThread = new BaseBean().getPropValue("hrmSalaryCustom", "personNumberInOneThread"); - int size= 100; - if(StringUtils.isNotBlank(personNumberInOneThread)){ + int size = 100; + if (StringUtils.isNotBlank(personNumberInOneThread)) { size = Integer.parseInt(personNumberInOneThread); } List> partition = Lists.partition(salaryAcctEmployeePOS, size); diff --git a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java index cae703b1c..b53499bf5 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java @@ -219,6 +219,7 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult // 检查是否正在核算中 ProgressDTO salaryAcctProgressDTO = getSalaryAcctProgressService(user).getProgress(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId()); if (Objects.nonNull(salaryAcctProgressDTO) && salaryAcctProgressDTO.isStatus() && Optional.ofNullable(salaryAcctProgressDTO.getProgress()).orElse(BigDecimal.ZERO).compareTo(BigDecimal.ONE) < 0) { + log.warn("正在核算中,无法再次执行"+calculateParam.getSalaryAcctRecordId()); return; } // 初始化进度 From db064863b2ea2278b24750883911b613a8e0c804 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 19 Sep 2024 14:19:26 +0800 Subject: [PATCH 076/124] =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/WEB-INF/prop/hrmSalary.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resource/WEB-INF/prop/hrmSalary.properties b/resource/WEB-INF/prop/hrmSalary.properties index 5c9223804..beede61ad 100644 --- a/resource/WEB-INF/prop/hrmSalary.properties +++ b/resource/WEB-INF/prop/hrmSalary.properties @@ -1,5 +1,5 @@ log=false defaultCloseNonStandard149=true AESEncryptScrect=990EB004A1C862721C1513AE90038C9E -version=2.15.1.2407.01 +version=2.15.2.2409.01 openFormulaForcedEditing=false \ No newline at end of file From dc3dfc2d6bb51affc05bfe98c69aa3f94622a374 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 20 Sep 2024 11:41:44 +0800 Subject: [PATCH 077/124] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E8=84=B1=E6=95=8F?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/salaryacct/param/SalaryAcctCalculateParam.java | 7 ------- .../salary/service/impl/SalaryAcctResultServiceImpl.java | 7 ------- src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java | 5 ----- 3 files changed, 19 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctCalculateParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctCalculateParam.java index b09c535ce..52c3b7f13 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctCalculateParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctCalculateParam.java @@ -1,6 +1,5 @@ package com.engine.salary.entity.salaryacct.param; -import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.util.valid.DataCheck; import lombok.AllArgsConstructor; import lombok.Builder; @@ -8,7 +7,6 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.util.Collection; -import java.util.Map; /** * 薪资核算的参数 @@ -29,9 +27,4 @@ public class SalaryAcctCalculateParam { @DataCheck(require = true,message = "参数错误,薪资核算记录ID不能为空") private Long salaryAcctRecordId; - - /** - * 人员信息,报表使用 - */ - private Map emps; } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 8019268ee..61320e5e3 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -976,13 +976,6 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe List salaryAcctResultPOS = SalaryAcctResultBO.convert2ResultPO(salaryAcctResultTempPOS); batchSave(salaryAcctResultPOS); sw.stop(); - new Thread() { - public void run() { - //保存核算报表数据 - List salaryAcctResultReportPOS = SalaryAcctResultReportBO.convert2ReportPO(salaryAcctResultTempPOS, calculateParam.getEmps()); - getSalaryAcctReportService(user).batchSave(salaryAcctResultReportPOS); - } - }.start(); // 删除薪资核算临时存储表中的数据 sw.start("处理核算数据,删除薪资核算临时存储表中的数据"); getSalaryAcctResultTempService(user).deleteByCalculateKey(calculateKey); diff --git a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java index b53499bf5..094602f01 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java @@ -16,7 +16,6 @@ import com.engine.salary.service.*; import com.engine.salary.service.impl.*; 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.page.PageInfo; import com.engine.salary.util.valid.ValidUtil; @@ -207,10 +206,6 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult public void calculate(SalaryAcctCalculateParam calculateParam) { log.info("开始核算V1{}", calculateParam); - //报表参数 - List emps = getSalaryEmployeeService(user).listAllForReport(); - calculateParam.setEmps(SalaryEntityUtil.convert2Map(emps, DataCollectionEmployee::getEmployeeId)); - //当前登陆人员 DataCollectionEmployee simpleEmployee = new DataCollectionEmployee(); simpleEmployee.setEmployeeId((long) user.getUID()); From 164a97a8e0f199a3bcdcd6cd415f3f5d230c4154 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 23 Sep 2024 11:10:25 +0800 Subject: [PATCH 078/124] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=A4=A7=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E9=87=8F=EF=BC=8C=E9=87=8D=E6=96=B0=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/AddUpSituationServiceImpl.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java index be0924a5d..e2976bbaf 100644 --- a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java @@ -253,9 +253,10 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation AddUpSituationBiz biz = new AddUpSituationBiz(); List addUpSituations = biz.listSome(AddUpSituation.builder().taxAgentId(taxAgentId).taxYearMonth(taxCycle).build()); - Set addUpSituationIds = SalaryEntityUtil.properties(addUpSituations, AddUpSituation::getId); + List addUpSituationIds = SalaryEntityUtil.properties(addUpSituations, AddUpSituation::getId, Collectors.toList()); if (CollectionUtils.isNotEmpty(addUpSituationIds)) { - getAddUpSituationMapper().deleteByIds(addUpSituationIds); + List> partition = Lists.partition(addUpSituationIds, 100); + partition.forEach(getAddUpSituationMapper()::deleteByIds); } return Boolean.TRUE; @@ -611,7 +612,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation String idNo = dto.getIdNo(); //筛选导入人员信息可以在人力资源池中匹配到的人员信息 - List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue, employees, userName, deparmentName, mobile, workcode, idNo,null); + List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue, employees, userName, deparmentName, mobile, workcode, idNo, null); //当人员信息导入筛选的全局配置为"0"时,姓名才是必填项 if (StringUtils.isBlank(userName) && "0".equals(confValue)) { From 17ef5a3c2b07c0d7f2dc66e02dda4c0c22cd6917 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 24 Sep 2024 13:19:20 +0800 Subject: [PATCH 079/124] =?UTF-8?q?=E6=B5=AE=E5=8A=A8=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/DM/sql202409130201.sql | 24 +++++++++++++++++++ resource/sqlupgrade/DM/sql202409130302.sql | 15 ++++++++++++ resource/sqlupgrade/GS/sql202409130201.sql | 24 +++++++++++++++++++ resource/sqlupgrade/GS/sql202409130302.sql | 15 ++++++++++++ resource/sqlupgrade/JC/sql202409130201.sql | 24 +++++++++++++++++++ resource/sqlupgrade/JC/sql202409130302.sql | 15 ++++++++++++ resource/sqlupgrade/Mysql/sql202409130201.sql | 16 +++++++++++++ resource/sqlupgrade/Mysql/sql202409130302.sql | 10 ++++++++ .../sqlupgrade/Oracle/sql202409130201.sql | 16 +++++++++++++ .../sqlupgrade/Oracle/sql202409130302.sql | 10 ++++++++ resource/sqlupgrade/PG/sql202409130201.sql | 16 +++++++++++++ resource/sqlupgrade/PG/sql202409130302.sql | 10 ++++++++ .../sqlupgrade/SQLServer/sql202409130201.sql | 16 +++++++++++++ .../sqlupgrade/SQLServer/sql202409130302.sql | 10 ++++++++ resource/sqlupgrade/ST/sql202409130201.sql | 24 +++++++++++++++++++ resource/sqlupgrade/ST/sql202409130302.sql | 15 ++++++++++++ 16 files changed, 260 insertions(+) create mode 100644 resource/sqlupgrade/DM/sql202409130201.sql create mode 100644 resource/sqlupgrade/DM/sql202409130302.sql create mode 100644 resource/sqlupgrade/GS/sql202409130201.sql create mode 100644 resource/sqlupgrade/GS/sql202409130302.sql create mode 100644 resource/sqlupgrade/JC/sql202409130201.sql create mode 100644 resource/sqlupgrade/JC/sql202409130302.sql create mode 100644 resource/sqlupgrade/Mysql/sql202409130201.sql create mode 100644 resource/sqlupgrade/Mysql/sql202409130302.sql create mode 100644 resource/sqlupgrade/Oracle/sql202409130201.sql create mode 100644 resource/sqlupgrade/Oracle/sql202409130302.sql create mode 100644 resource/sqlupgrade/PG/sql202409130201.sql create mode 100644 resource/sqlupgrade/PG/sql202409130302.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202409130201.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202409130302.sql create mode 100644 resource/sqlupgrade/ST/sql202409130201.sql create mode 100644 resource/sqlupgrade/ST/sql202409130302.sql diff --git a/resource/sqlupgrade/DM/sql202409130201.sql b/resource/sqlupgrade/DM/sql202409130201.sql new file mode 100644 index 000000000..ee19534ed --- /dev/null +++ b/resource/sqlupgrade/DM/sql202409130201.sql @@ -0,0 +1,24 @@ +delete from HtmlLabelIndex where id = 548025 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 548025,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 548025 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 548025 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 548025 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 548025 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 548025 as indexid ,'Floating Data' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 548025 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 548025 as indexid ,'Ӕ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + diff --git a/resource/sqlupgrade/DM/sql202409130302.sql b/resource/sqlupgrade/DM/sql202409130302.sql new file mode 100644 index 000000000..f9f4f825d --- /dev/null +++ b/resource/sqlupgrade/DM/sql202409130302.sql @@ -0,0 +1,15 @@ +Delete from LeftMenuInfo where id=100219; +/ + +Delete from LeftMenuConfig where infoid=100219; +/ + +call LMConfig_U_ByInfoInsert (2,100126,0); +/ + +call LMInfo_Insert (100219,548025,'','',2,100126,7,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/variableSalary' where id = 100219; +/ + diff --git a/resource/sqlupgrade/GS/sql202409130201.sql b/resource/sqlupgrade/GS/sql202409130201.sql new file mode 100644 index 000000000..ee19534ed --- /dev/null +++ b/resource/sqlupgrade/GS/sql202409130201.sql @@ -0,0 +1,24 @@ +delete from HtmlLabelIndex where id = 548025 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 548025,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 548025 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 548025 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 548025 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 548025 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 548025 as indexid ,'Floating Data' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 548025 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 548025 as indexid ,'Ӕ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + diff --git a/resource/sqlupgrade/GS/sql202409130302.sql b/resource/sqlupgrade/GS/sql202409130302.sql new file mode 100644 index 000000000..f9f4f825d --- /dev/null +++ b/resource/sqlupgrade/GS/sql202409130302.sql @@ -0,0 +1,15 @@ +Delete from LeftMenuInfo where id=100219; +/ + +Delete from LeftMenuConfig where infoid=100219; +/ + +call LMConfig_U_ByInfoInsert (2,100126,0); +/ + +call LMInfo_Insert (100219,548025,'','',2,100126,7,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/variableSalary' where id = 100219; +/ + diff --git a/resource/sqlupgrade/JC/sql202409130201.sql b/resource/sqlupgrade/JC/sql202409130201.sql new file mode 100644 index 000000000..ee19534ed --- /dev/null +++ b/resource/sqlupgrade/JC/sql202409130201.sql @@ -0,0 +1,24 @@ +delete from HtmlLabelIndex where id = 548025 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 548025,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 548025 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 548025 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 548025 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 548025 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 548025 as indexid ,'Floating Data' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 548025 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 548025 as indexid ,'Ӕ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + diff --git a/resource/sqlupgrade/JC/sql202409130302.sql b/resource/sqlupgrade/JC/sql202409130302.sql new file mode 100644 index 000000000..f9f4f825d --- /dev/null +++ b/resource/sqlupgrade/JC/sql202409130302.sql @@ -0,0 +1,15 @@ +Delete from LeftMenuInfo where id=100219; +/ + +Delete from LeftMenuConfig where infoid=100219; +/ + +call LMConfig_U_ByInfoInsert (2,100126,0); +/ + +call LMInfo_Insert (100219,548025,'','',2,100126,7,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/variableSalary' where id = 100219; +/ + diff --git a/resource/sqlupgrade/Mysql/sql202409130201.sql b/resource/sqlupgrade/Mysql/sql202409130201.sql new file mode 100644 index 000000000..50f416219 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202409130201.sql @@ -0,0 +1,16 @@ +delete from HtmlLabelIndex where id = 548025 and ( indexdesc is null or indexdesc = '' ) +; +insert into HtmlLabelIndex(id,indexdesc) select 548025,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 548025 and ( indexdesc is not null and indexdesc <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 548025 and languageid=7 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 548025 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 +; +delete from HtmlLabelInfo where indexid = 548025 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=char_length(labelname) ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 548025 as indexid ,'Floating Data' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=char_length(labelname) )) limit 1 +; +delete from HtmlLabelInfo where indexid = 548025 and languageid=9 and ( labelname is null or labelname = '' ) +; +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 548025 as indexid ,'Ӕ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 +; diff --git a/resource/sqlupgrade/Mysql/sql202409130302.sql b/resource/sqlupgrade/Mysql/sql202409130302.sql new file mode 100644 index 000000000..e53f1a601 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202409130302.sql @@ -0,0 +1,10 @@ +Delete from LeftMenuInfo where id=100219 +; +Delete from LeftMenuConfig where infoid=100219 +; +call LMConfig_U_ByInfoInsert (2,100126,0) +; +call LMInfo_Insert (100219,548025,'','',2,100126,7,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/variableSalary' where id = 100219 +; \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202409130201.sql b/resource/sqlupgrade/Oracle/sql202409130201.sql new file mode 100644 index 000000000..1462f878d --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202409130201.sql @@ -0,0 +1,16 @@ +delete from HtmlLabelIndex where id = 548025 and ( trim(indexdesc) is null ) +/ +insert into HtmlLabelIndex(id,indexdesc) select 548025,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 548025 and ( trim(indexdesc) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 548025 and languageid=7 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 548025 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 548025 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 548025 as indexid ,'Floating Data' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 +/ +delete from HtmlLabelInfo where indexid = 548025 and languageid=9 and ( trim(labelname) is null ) +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 548025 as indexid ,'Ӕ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202409130302.sql b/resource/sqlupgrade/Oracle/sql202409130302.sql new file mode 100644 index 000000000..aa1c20a30 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202409130302.sql @@ -0,0 +1,10 @@ +Delete from LeftMenuInfo where id=100219 +/ +Delete from LeftMenuConfig where infoid=100219 +/ +call LMConfig_U_ByInfoInsert (2,100126,0) +/ +call LMInfo_Insert (100219,548025,'','',2,100126,7,2) +/ +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/variableSalary' where id = 100219 +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202409130201.sql b/resource/sqlupgrade/PG/sql202409130201.sql new file mode 100644 index 000000000..acb55b3a0 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202409130201.sql @@ -0,0 +1,16 @@ +delete from HtmlLabelIndex where id = 548025 and ( indexdesc is null or indexdesc = '' ) ; +/ +insert into HtmlLabelIndex(id,indexdesc) select 548025,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 548025 and ( indexdesc is not null and indexdesc <> '' )) limit 1 ; +/ +delete from HtmlLabelInfo where indexid = 548025 and languageid=7 and ( labelname is null or labelname = '' ) ; +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 548025 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=7 and ( labelname is not null and labelname <> '' )) limit 1 ; +/ +delete from HtmlLabelInfo where indexid = 548025 and languageid=8 and ( labelname is null or labelname = '' or length(labelname)!=octet_length(labelname) ) ; +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 548025 as indexid ,'Floating Data' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=8 and ( labelname is not null and labelname <> '' and length(labelname)=octet_length(labelname) )) limit 1 ; +/ +delete from HtmlLabelInfo where indexid = 548025 and languageid=9 and ( labelname is null or labelname = '' ) ; +/ +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 548025 as indexid ,'Ӕ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=9 and ( labelname is not null and labelname <> '' )) limit 1 ; +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202409130302.sql b/resource/sqlupgrade/PG/sql202409130302.sql new file mode 100644 index 000000000..70a52cf80 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202409130302.sql @@ -0,0 +1,10 @@ +Delete from LeftMenuInfo where id=100219 +; +Delete from LeftMenuConfig where infoid=100219 +; +select LMConfig_U_ByInfoInsert (2,100126,0) +; +select LMInfo_Insert (100219,548025,'','',2,100126,7,2) +; +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/variableSalary' where id = 100219 +; \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202409130201.sql b/resource/sqlupgrade/SQLServer/sql202409130201.sql new file mode 100644 index 000000000..a60fae14e --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202409130201.sql @@ -0,0 +1,16 @@ +delete from HtmlLabelIndex where id = 548025 and ( indexdesc is null or indexdesc = '' ) +GO +insert into HtmlLabelIndex(id,indexdesc) select top 1 548025,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 548025 and ( indexdesc is not null and indexdesc <> '' )) +GO +delete from HtmlLabelInfo where indexid = 548025 and languageid=7 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 548025 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=7 and ( labelname is not null and labelname <> '' )) +GO +delete from HtmlLabelInfo where indexid = 548025 and languageid=8 and ( labelname is null or labelname = '' or labelname like '%[߹-]%' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 548025 as indexid ,'Floating Data' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=8 and ( labelname is not null and labelname <> '' and labelname not like '%[߹-]%' )) +GO +delete from HtmlLabelInfo where indexid = 548025 and languageid=9 and ( labelname is null or labelname = '' ) +GO +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select top 1 548025 as indexid ,'Ӕ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=9 and ( labelname is not null and labelname <> '' )) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202409130302.sql b/resource/sqlupgrade/SQLServer/sql202409130302.sql new file mode 100644 index 000000000..81608c0b6 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202409130302.sql @@ -0,0 +1,10 @@ +Delete from LeftMenuInfo where id=100219 +GO +Delete from LeftMenuConfig where infoid=100219 +GO +EXECUTE LMConfig_U_ByInfoInsert 2,100126,0 +GO +EXECUTE LMInfo_Insert 100219,548025,'','',2,100126,7,2 +GO +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/variableSalary' where id = 100219 +GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql202409130201.sql b/resource/sqlupgrade/ST/sql202409130201.sql new file mode 100644 index 000000000..ee19534ed --- /dev/null +++ b/resource/sqlupgrade/ST/sql202409130201.sql @@ -0,0 +1,24 @@ +delete from HtmlLabelIndex where id = 548025 and ( trim(indexdesc) is null ) ; +/ + +insert into HtmlLabelIndex(id,indexdesc) select 548025,'' from HtmlLabelIndex where not exists (select id from HtmlLabelIndex where id = 548025 and ( trim(indexdesc) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 548025 and languageid=7 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 548025 as indexid ,'' as content,7 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=7 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 548025 and languageid=8 and ( trim(labelname) is null or length(labelname)!=lengthb(labelname) ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 548025 as indexid ,'Floating Data' as content,8 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=8 and ( trim(labelname) is not null and length(labelname)=lengthb(labelname) )) and rownum = 1 ; +/ + +delete from HtmlLabelInfo where indexid = 548025 and languageid=9 and ( trim(labelname) is null ) ; +/ + +insert into HtmlLabelInfo(indexid,labelname,languageid) select * from (select 548025 as indexid ,'Ӕ' as content,9 as languageid from HtmlLabelInfo) t where not exists (select indexid,languageid from HtmlLabelInfo where indexid = 548025 and languageid=9 and ( trim(labelname) is not null )) and rownum = 1 ; +/ + diff --git a/resource/sqlupgrade/ST/sql202409130302.sql b/resource/sqlupgrade/ST/sql202409130302.sql new file mode 100644 index 000000000..f9f4f825d --- /dev/null +++ b/resource/sqlupgrade/ST/sql202409130302.sql @@ -0,0 +1,15 @@ +Delete from LeftMenuInfo where id=100219; +/ + +Delete from LeftMenuConfig where infoid=100219; +/ + +call LMConfig_U_ByInfoInsert (2,100126,0); +/ + +call LMInfo_Insert (100219,548025,'','',2,100126,7,2); +/ + +update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/variableSalary' where id = 100219; +/ + From 6f10ac4ab236f7d13182ff7aa65a783afbafcfb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 24 Sep 2024 19:04:57 +0800 Subject: [PATCH 080/124] =?UTF-8?q?=E5=8F=96=E6=B6=88=E9=9D=9E=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E4=BA=BA=E5=91=98=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/DM/sql202303130202.sql | 14 -------------- resource/sqlupgrade/GS/sql202303130202.sql | 14 -------------- resource/sqlupgrade/JC/sql202303130202.sql | 14 -------------- resource/sqlupgrade/Mysql/sql202303130202.sql | 10 ---------- resource/sqlupgrade/Oracle/sql202303130202.sql | 10 ---------- resource/sqlupgrade/PG/sql202303130202.sql | 10 ---------- resource/sqlupgrade/SQLServer/sql202303130202.sql | 10 ---------- resource/sqlupgrade/ST/sql202303130202.sql | 14 -------------- 8 files changed, 96 deletions(-) delete mode 100644 resource/sqlupgrade/DM/sql202303130202.sql delete mode 100644 resource/sqlupgrade/GS/sql202303130202.sql delete mode 100644 resource/sqlupgrade/JC/sql202303130202.sql delete mode 100644 resource/sqlupgrade/Mysql/sql202303130202.sql delete mode 100644 resource/sqlupgrade/Oracle/sql202303130202.sql delete mode 100644 resource/sqlupgrade/PG/sql202303130202.sql delete mode 100644 resource/sqlupgrade/SQLServer/sql202303130202.sql delete mode 100644 resource/sqlupgrade/ST/sql202303130202.sql diff --git a/resource/sqlupgrade/DM/sql202303130202.sql b/resource/sqlupgrade/DM/sql202303130202.sql deleted file mode 100644 index 9038f9cd1..000000000 --- a/resource/sqlupgrade/DM/sql202303130202.sql +++ /dev/null @@ -1,14 +0,0 @@ -Delete from LeftMenuInfo where id=100186; -/ - -Delete from LeftMenuConfig where infoid=100186; -/ - -call LMConfig_U_ByInfoInsert (2,100118,9); -/ - -call LMInfo_Insert (100186,541290,'','',2,100118,9,18); -/ - -update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/externalPersonManage' where id = 100186; -/ \ No newline at end of file diff --git a/resource/sqlupgrade/GS/sql202303130202.sql b/resource/sqlupgrade/GS/sql202303130202.sql deleted file mode 100644 index 9038f9cd1..000000000 --- a/resource/sqlupgrade/GS/sql202303130202.sql +++ /dev/null @@ -1,14 +0,0 @@ -Delete from LeftMenuInfo where id=100186; -/ - -Delete from LeftMenuConfig where infoid=100186; -/ - -call LMConfig_U_ByInfoInsert (2,100118,9); -/ - -call LMInfo_Insert (100186,541290,'','',2,100118,9,18); -/ - -update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/externalPersonManage' where id = 100186; -/ \ No newline at end of file diff --git a/resource/sqlupgrade/JC/sql202303130202.sql b/resource/sqlupgrade/JC/sql202303130202.sql deleted file mode 100644 index 9038f9cd1..000000000 --- a/resource/sqlupgrade/JC/sql202303130202.sql +++ /dev/null @@ -1,14 +0,0 @@ -Delete from LeftMenuInfo where id=100186; -/ - -Delete from LeftMenuConfig where infoid=100186; -/ - -call LMConfig_U_ByInfoInsert (2,100118,9); -/ - -call LMInfo_Insert (100186,541290,'','',2,100118,9,18); -/ - -update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/externalPersonManage' where id = 100186; -/ \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202303130202.sql b/resource/sqlupgrade/Mysql/sql202303130202.sql deleted file mode 100644 index 81f96bbd2..000000000 --- a/resource/sqlupgrade/Mysql/sql202303130202.sql +++ /dev/null @@ -1,10 +0,0 @@ -Delete from LeftMenuInfo where id=100186 -; -Delete from LeftMenuConfig where infoid=100186 -; -call LMConfig_U_ByInfoInsert (2,100118,9) -; -call LMInfo_Insert (100186,541290,'','',2,100118,9,18) -; -update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/externalPersonManage' where id = 100186 -; \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202303130202.sql b/resource/sqlupgrade/Oracle/sql202303130202.sql deleted file mode 100644 index d6b3c8be5..000000000 --- a/resource/sqlupgrade/Oracle/sql202303130202.sql +++ /dev/null @@ -1,10 +0,0 @@ -Delete from LeftMenuInfo where id=100186 -/ -Delete from LeftMenuConfig where infoid=100186 -/ -call LMConfig_U_ByInfoInsert (2,100118,9) -/ -call LMInfo_Insert (100186,541290,'','',2,100118,9,18) -/ -update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/externalPersonManage' where id = 100186 -/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202303130202.sql b/resource/sqlupgrade/PG/sql202303130202.sql deleted file mode 100644 index c6ed8b220..000000000 --- a/resource/sqlupgrade/PG/sql202303130202.sql +++ /dev/null @@ -1,10 +0,0 @@ -Delete from LeftMenuInfo where id=100186; -/ -Delete from LeftMenuConfig where infoid=100186; -/ -select LMConfig_U_ByInfoInsert (2,100118,9); -/ -select LMInfo_Insert (100186,541290,'','',2,100118,9,18); -/ -update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/externalPersonManage' where id = 100186; -/ \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202303130202.sql b/resource/sqlupgrade/SQLServer/sql202303130202.sql deleted file mode 100644 index 9b7bbe305..000000000 --- a/resource/sqlupgrade/SQLServer/sql202303130202.sql +++ /dev/null @@ -1,10 +0,0 @@ -Delete from LeftMenuInfo where id=100186 -GO -Delete from LeftMenuConfig where infoid=100186 -GO -EXECUTE LMConfig_U_ByInfoInsert 2,100118,9 -GO -EXECUTE LMInfo_Insert 100186,541290,'','',2,100118,9,18 -GO -update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/externalPersonManage' where id = 100186 -GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql202303130202.sql b/resource/sqlupgrade/ST/sql202303130202.sql deleted file mode 100644 index 9038f9cd1..000000000 --- a/resource/sqlupgrade/ST/sql202303130202.sql +++ /dev/null @@ -1,14 +0,0 @@ -Delete from LeftMenuInfo where id=100186; -/ - -Delete from LeftMenuConfig where infoid=100186; -/ - -call LMConfig_U_ByInfoInsert (2,100118,9); -/ - -call LMInfo_Insert (100186,541290,'','',2,100118,9,18); -/ - -update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/externalPersonManage' where id = 100186; -/ \ No newline at end of file From ff200e25861e1f19c3dc51e2504e4c220eb8d741 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 25 Sep 2024 11:45:36 +0800 Subject: [PATCH 081/124] =?UTF-8?q?=E6=A0=B8=E7=AE=97=E7=A1=AE=E8=AE=A4?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E7=BB=84=E7=BB=87=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/salaryacct/bo/SalaryAcctEmployeeBO.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctEmployeeBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctEmployeeBO.java index 26e2b2670..c0c2dfa53 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctEmployeeBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctEmployeeBO.java @@ -63,9 +63,9 @@ public class SalaryAcctEmployeeBO { .employeeName(simpleEmployee.getUsername()) .taxAgentId(e.getTaxAgentId()) .taxAgentName(taxAgentNameMap.getOrDefault(e.getTaxAgentId(), StringUtils.EMPTY)) - .departmentId(simpleEmployee.getDepartmentId()) - .departmentName(simpleEmployee.getDepartmentName()) - .status(UserStatusEnum.getDefaultLabelByValue(NumberUtils.toInt(simpleEmployee.getStatus()))) + .departmentId(e.getDepartmentId()) + .departmentName(e.getDepartmentName()) + .status(UserStatusEnum.getDefaultLabelByValue(NumberUtils.toInt(e.getStatus()))) .mobile(simpleEmployee.getMobile()) .jobNum(simpleEmployee.getWorkcode()) .hireDate(simpleEmployee.getCompanystartdate()) From 9f7fe00303bf3335acc7b1b25aa6bbbe8715e443 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 25 Sep 2024 13:38:45 +0800 Subject: [PATCH 082/124] =?UTF-8?q?=E7=A9=BF=E9=80=8F=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E5=BF=AB=E7=85=A7=E7=BB=84=E7=BB=87=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/service/impl/SalaryStatisticsReportServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 962e3b135..42a65d485 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -616,7 +616,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary DataCollectionEmployee emp = employeeMap.get(se.getEmployeeId()); resultMap.put("id", se.getId().toString()); resultMap.put("userName", emp == null ? "" : emp.getUsername()); - resultMap.put("departmentName", emp == null ? "" : emp.getDepartmentName()); + resultMap.put("departmentName", se.getDepartmentName()); resultMap.put("salaryMonth", SalaryDateUtil.getFormatYearMonth(se.getSalaryMonth())); resultMap.put("taxAgent", taxAgentMap.get(se.getTaxAgentId())); resultMap.put("salarySob", SalarySobMap.get(se.getSalarySobId())); From b732430562e1bb813f498121f14742c215f954ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 25 Sep 2024 15:40:36 +0800 Subject: [PATCH 083/124] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E5=B7=A5=E5=8F=B7=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/sys/enums/OrderRuleEnum.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/sys/enums/OrderRuleEnum.java b/src/com/engine/salary/sys/enums/OrderRuleEnum.java index 560cc51a8..2d60f13bf 100644 --- a/src/com/engine/salary/sys/enums/OrderRuleEnum.java +++ b/src/com/engine/salary/sys/enums/OrderRuleEnum.java @@ -18,7 +18,8 @@ public enum OrderRuleEnum implements BaseEnum { LASTNAME("e.lastName", "人员名称", 1), DEPTNAME("d.departmentname", "部门名称", 1), SUBCOMNAME("c.subcompanyname", "分部名称", 1), - SHOWORDEROFDEPTTREE("d.showOrderOfTree", "组织", 1); + SHOWORDEROFDEPTTREE("d.showOrderOfTree", "组织", 1), + WORKCODE("e.workcode", "工号", 1); private String value; From 7d0ebd1cdca90a718200dd88cc8d88ff194d95d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 26 Sep 2024 17:00:59 +0800 Subject: [PATCH 084/124] =?UTF-8?q?=E7=B2=BE=E7=AE=80=E7=89=88=E5=B8=B8?= =?UTF-8?q?=E7=94=A8=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/wiki/常用查询.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/resource/wiki/常用查询.md b/resource/wiki/常用查询.md index 13ba2242f..71f4f51a6 100644 --- a/resource/wiki/常用查询.md +++ b/resource/wiki/常用查询.md @@ -10,6 +10,14 @@ left join hrsa_tax_agent agent on agent.id=sob.tax_agent_id and agent.delete_typ left join hrmresource e on e.id= result.employee_id +select e.lastname, record.salary_month as 薪资月, item.name as 薪资项 ,result.result_value as 值 +from hrsa_salary_acct_record record +left join hrsa_salary_acct_result result on record.id = result.salary_acct_record_id and result.delete_type = 0 and record.delete_type = 0 +left join hrsa_salary_item item on result.salary_item_id = item.id and item.delete_type = 0 +left join hrmresource e on e.id= result.employee_id +where item.name = '工资薪金合计' + + # 获取档案信息 select i.item_value from hrsa_salary_archive_item i From ecd99537faa2214f94a43935911ca937361b5d81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 27 Sep 2024 11:04:44 +0800 Subject: [PATCH 085/124] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=B5=AE=E5=8A=A8?= =?UTF-8?q?=E6=95=B0=E6=8D=AEnull?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/VariableArchiveServiceImpl.java | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java b/src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java index b008273c6..af4c29ef5 100644 --- a/src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java @@ -1,5 +1,6 @@ package com.engine.salary.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; @@ -220,7 +221,7 @@ public class VariableArchiveServiceImpl extends Service implements VariableArchi .employeeId(saveParam.getEmployeeId()) .taxAgentId(saveParam.getTaxAgentIds()) .salaryMonth(saveParam.getSalaryMonthDate()) - .creator(Long.valueOf(user.getUID())) + .creator((long) user.getUID()) .createTime(now) .updateTime(now) .deleteType(NumberUtils.INTEGER_ZERO) @@ -230,20 +231,22 @@ public class VariableArchiveServiceImpl extends Service implements VariableArchi // 保存浮动薪资档案详细信息 List variableArchiveItemList = new ArrayList<>(); - saveParam.getItemValueList().forEach(e -> { - variableArchiveItemList.add(VariableArchiveItemPO.builder() - .id(IdGenerator.generate()) - .employeeId(saveParam.getEmployeeId()) - .variableArchiveId(variableArchivePO.getId()) - .variableItemId(e.getVariableItemId()) - .itemValue(e.getItemValue()) - .creator(Long.valueOf(user.getUID())) - .createTime(now) - .updateTime(now) - .deleteType(NumberUtils.INTEGER_ZERO) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .build()); - }); + if(CollectionUtil.isNotEmpty(saveParam.getItemValueList())){ + saveParam.getItemValueList().forEach(e -> { + variableArchiveItemList.add(VariableArchiveItemPO.builder() + .id(IdGenerator.generate()) + .employeeId(saveParam.getEmployeeId()) + .variableArchiveId(variableArchivePO.getId()) + .variableItemId(e.getVariableItemId()) + .itemValue(e.getItemValue()) + .creator((long) user.getUID()) + .createTime(now) + .updateTime(now) + .deleteType(NumberUtils.INTEGER_ZERO) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build()); + }); + } if (CollectionUtils.isNotEmpty(variableArchiveItemList)) { getVariableArchiveItemService(user).batchInsert(variableArchiveItemList); From 0852094cb17066b2d149bf736f08c68e252328d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 27 Sep 2024 11:13:00 +0800 Subject: [PATCH 086/124] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B5=AE=E5=8A=A8?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=89=A3=E7=BC=B4=E4=B9=89=E5=8A=A1=E4=BA=BA?= =?UTF-8?q?id=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/datacollection/dto/VariableArchiveListDTO.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/entity/datacollection/dto/VariableArchiveListDTO.java b/src/com/engine/salary/entity/datacollection/dto/VariableArchiveListDTO.java index de5c0fd22..6d5905390 100644 --- a/src/com/engine/salary/entity/datacollection/dto/VariableArchiveListDTO.java +++ b/src/com/engine/salary/entity/datacollection/dto/VariableArchiveListDTO.java @@ -44,7 +44,7 @@ public class VariableArchiveListDTO { /** * 个税扣缴义务人id */ - private String taxAgentId; + private Long taxAgentId; /** * 姓名 From 4db0fdc6997319c3572915eaed29945a9957c97b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 27 Sep 2024 17:18:07 +0800 Subject: [PATCH 087/124] =?UTF-8?q?SQL=20=E4=BD=BF=E7=94=A8mybatis?= =?UTF-8?q?=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/mapper/InsuranceExportMapper.java | 6 ------ src/com/engine/salary/mapper/SQLMapper.java | 18 ++++++++++++++++++ src/com/engine/salary/mapper/SQLMapper.xml | 7 +++++++ .../service/impl/FormulaRunServiceImpl.java | 11 +++++++++++ 4 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 src/com/engine/salary/mapper/SQLMapper.java create mode 100644 src/com/engine/salary/mapper/SQLMapper.xml diff --git a/src/com/engine/salary/mapper/InsuranceExportMapper.java b/src/com/engine/salary/mapper/InsuranceExportMapper.java index 2464c49de..b4ef25f66 100644 --- a/src/com/engine/salary/mapper/InsuranceExportMapper.java +++ b/src/com/engine/salary/mapper/InsuranceExportMapper.java @@ -8,12 +8,6 @@ import org.apache.ibatis.annotations.Param; import java.util.List; -/** - * @Author weaver_cl - * - * @Date 2022/4/18 - * @Version V1.0 - **/ public interface InsuranceExportMapper { List exportExcelAccount(@Param("param") InsuranceComparisonResultQueryParam param); diff --git a/src/com/engine/salary/mapper/SQLMapper.java b/src/com/engine/salary/mapper/SQLMapper.java new file mode 100644 index 000000000..4d998fa88 --- /dev/null +++ b/src/com/engine/salary/mapper/SQLMapper.java @@ -0,0 +1,18 @@ +package com.engine.salary.mapper; + +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * SQLMapper + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public interface SQLMapper { + List runSQL(@Param("sql") String sql); +} diff --git a/src/com/engine/salary/mapper/SQLMapper.xml b/src/com/engine/salary/mapper/SQLMapper.xml new file mode 100644 index 000000000..bba76972c --- /dev/null +++ b/src/com/engine/salary/mapper/SQLMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java b/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java index 2b76af128..07c5ae633 100644 --- a/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java +++ b/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java @@ -9,9 +9,11 @@ import com.engine.salary.enums.salaryformula.ReferenceTypeEnum; import com.engine.salary.formlua.core.QlExpress; import com.engine.salary.formlua.entity.parameter.DataType; import com.engine.salary.formlua.entity.standard.ExcelResult; +import com.engine.salary.mapper.SQLMapper; import com.engine.salary.service.FormulaRunService; import com.engine.salary.sys.enums.OpenEnum; import com.engine.salary.util.JsonUtil; +import com.engine.salary.util.db.MapperProxyFactory; import com.ql.util.express.DefaultContext; import com.ql.util.express.ExpressRunner; import lombok.extern.slf4j.Slf4j; @@ -41,6 +43,9 @@ public class FormulaRunServiceImpl extends Service implements FormulaRunService QlExpress express = new QlExpress(); + private SQLMapper getSQLMapper(){ + return MapperProxyFactory.getProxy(SQLMapper.class); + } @Override public ExcelResult run(ExpressFormula expressFormula, List formulaVars, DataCollectionEmployee simpleEmployee) { @@ -123,6 +128,12 @@ public class FormulaRunServiceImpl extends Service implements FormulaRunService } } } else { + +// List list = getSQLMapper().runSQL(sql); +// if(CollectionUtil.isNotEmpty(list)){ +// result = Util.null2String(list.get(0).get(sqlReturnKey)); +// } + RecordSet rs = new RecordSet(); if (rs.execute(sql)) { if (rs.next()) { From 93d2980ad8d50587d6a54c8e8c3dd471f9b09f41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Sun, 29 Sep 2024 10:37:38 +0800 Subject: [PATCH 088/124] =?UTF-8?q?=E5=88=B7=E6=96=B0=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E4=BA=BA=E5=91=98=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryAcctEmployeeServiceImpl.java | 76 +++++++++++-------- .../salary/web/SalaryAcctController.java | 6 +- .../wrapper/SalaryAcctEmployeeWrapper.java | 4 +- 3 files changed, 51 insertions(+), 35 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index 7ca1a1f4d..a36f2dd57 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -5,9 +5,9 @@ import cn.hutool.core.date.DateUtil; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; -import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryacct.bo.SalaryAcctEmployeeBO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctEmployeeCountDTO; @@ -444,6 +444,11 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct @Override public void deleteByIds(Collection ids) { + + if (CollectionUtils.isEmpty(ids)) { + return; + } + // 删除薪资核算人员 getSalaryAcctEmployeeMapper().deleteByIds(ids); // 删除薪资核算人员对应的薪资核算结果 @@ -547,36 +552,47 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct @Override public void refresh(Long salaryAcctRecordId) { - // 查询薪资核算人员 - List salaryAcctEmployeePOS = listBySalaryAcctRecordId(salaryAcctRecordId); - if (CollectionUtils.isEmpty(salaryAcctEmployeePOS)) { - return; - } - List employeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getEmployeeId, Collectors.toList()); // 查询薪资核算记录 SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salaryAcctRecordId); if (Objects.isNull(salaryAcctRecordPO)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); } + + // 根据薪资账套查询人员 + List salaryEmployees = getSalaryEmployeeService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + if (CollectionUtils.isEmpty(salaryEmployees)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "未查询到账套下关联人员")); + } + + // 根据薪资账套查询薪资周期 + SalarySobCycleDTO salarySobCycleDTO = getSalarySobService(user).getSalarySobCycle(salaryAcctRecordPO.getSalarySobId(), SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth())); + //查询账套对应的扣缴义务人 SalarySobPO salarySobPO = getSalarySobService(user).getById(salaryAcctRecordPO.getSalarySobId()); - //过滤掉不属于当前账套扣缴义务人的人员 Long taxAgentId = salarySobPO.getTaxAgentId(); - // 查询薪资核算记录所用的帐套的薪资周期 - SalarySobCycleDTO salarySobCycleDTO = getSalarySobService(user).getSalarySobCycle(salaryAcctRecordPO.getSalarySobId(), SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth())); // 查询薪资档案,获取人员的个税扣缴义务人 + List employeeIds = SalaryEntityUtil.properties(salaryEmployees, DataCollectionEmployee::getEmployeeId, Collectors.toList()); List salaryArchiveDataDTOS = getSalaryArchiveService(user).getSalaryArchiveTaxAgentData(salarySobCycleDTO.getSalaryCycle(), employeeIds, taxAgentId); - List employees = getSalaryEmployeeService(user).getEmployeeByIdsAll(employeeIds); // 转换成薪资核算人员po - List newSalaryAcctEmployeePOS = SalaryAcctEmployeeBO.convert2Employee(employees, salaryAcctRecordPO, salaryArchiveDataDTOS, (long) user.getUID()); - newSalaryAcctEmployeePOS = newSalaryAcctEmployeePOS.stream().filter(po -> Objects.equals(taxAgentId, po.getTaxAgentId())).collect(Collectors.toList()); - // 删除以前的薪资核算人员 - getSalaryAcctEmployeeMapper().deleteBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecordId)); - // 插入新的薪资核算人员 - if (CollectionUtils.isNotEmpty(newSalaryAcctEmployeePOS)) { - batchSave(newSalaryAcctEmployeePOS); - } + List newEmps = SalaryAcctEmployeeBO.convert2Employee(salaryEmployees, salaryAcctRecordPO, salaryArchiveDataDTOS, (long) user.getUID()); + //过滤掉不属于当前账套扣缴义务人的人员 + newEmps = newEmps.stream().filter(po -> Objects.equals(taxAgentId, po.getTaxAgentId())).collect(Collectors.toList()); + Map newEmpMap = SalaryEntityUtil.convert2Map(newEmps, e -> e.getTaxAgentId() + "_" + e.getEmployeeId()); + + + // 查询薪资核算人员 + List oldEmps = listBySalaryAcctRecordId(salaryAcctRecordId); + Map oldEmpMap = SalaryEntityUtil.convert2Map(oldEmps, e -> e.getTaxAgentId() + "_" + e.getEmployeeId()); + + //新增 + List addEmps = newEmps.stream().filter(po -> !oldEmpMap.containsKey(po.getTaxAgentId() + "_" + po.getEmployeeId())).collect(Collectors.toList()); + + //删除 + List delIds = oldEmps.stream().filter(po -> !newEmpMap.containsKey(po.getTaxAgentId() + "_" + po.getEmployeeId())).map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); + + deleteByIds(delIds); + batchSave(addEmps); } @@ -712,20 +728,20 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct // } // list = list.stream().filter(po -> employeeIdsByGradeFilter.contains(po.getEmployeeId())).collect(Collectors.toList()); // } - // 岗位过滤 + // 岗位过滤 List position = param.getPosition(); if (CollectionUtils.isNotEmpty(position)) { - // Set employeeIdsByPostionFilter = new HashSet<>(); - // simpleEmployeeList.forEach(simpleEmployee -> { - // if (simpleEmployee.getPosition() != null && param.getPosition().contains(simpleEmployee.getPosition().getId())) { - // employeeIdsByPostionFilter.add(simpleEmployee.getEmployeeId()); - // } - // }); - // if (CollectionUtils.isEmpty(employeeIdsByPostionFilter)) { - // return Lists.newArrayList(); - // } + // Set employeeIdsByPostionFilter = new HashSet<>(); + // simpleEmployeeList.forEach(simpleEmployee -> { + // if (simpleEmployee.getPosition() != null && param.getPosition().contains(simpleEmployee.getPosition().getId())) { + // employeeIdsByPostionFilter.add(simpleEmployee.getEmployeeId()); + // } + // }); + // if (CollectionUtils.isEmpty(employeeIdsByPostionFilter)) { + // return Lists.newArrayList(); + // } employeeList = employeeList.stream().filter(emp -> position.contains(emp.getJobtitleId())).collect(Collectors.toList()); - } + } // 人事状态过滤 if (CollectionUtils.isNotEmpty(param.getStatus())) { Set employeeIdsByStatus = new HashSet<>(); diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 571884aa5..49fba1129 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -247,13 +247,13 @@ public class SalaryAcctController { return new ResponseResult(user).run(getSalaryAcctEmployeeWrapper(user)::checkTaxAgent, param.getSalaryAcctRecordId()); } - //刷新薪资核算人员的个税扣缴义务人 + //刷新薪资核算人员 @POST - @Path("/acctemployee/refreshTaxAgent") + @Path("/acctemployee/refresh") @Produces(MediaType.APPLICATION_JSON) public String refreshTaxAgent(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctEmpRefreshTaxAgentParam param) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getSalaryAcctEmployeeWrapper(user)::refreshTaxAgent, param.getSalaryAcctRecordId()); + return new ResponseResult(user).run(getSalaryAcctEmployeeWrapper(user)::refresh, param.getSalaryAcctRecordId()); } //从环比上月减少添加薪资核算人员 diff --git a/src/com/engine/salary/wrapper/SalaryAcctEmployeeWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctEmployeeWrapper.java index 095935fd5..c0d207d45 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctEmployeeWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctEmployeeWrapper.java @@ -184,11 +184,11 @@ public class SalaryAcctEmployeeWrapper extends Service { } /** - * 刷新个税扣缴义务人 + * 刷新核算人员 * * @param salaryAcctRecordId 薪资核算记录的id */ - public void refreshTaxAgent(Long salaryAcctRecordId) { + public void refresh(Long salaryAcctRecordId) { getSalaryAcctEmployeeService(user).refresh(salaryAcctRecordId); } From b4050e4ee850de70bcadbae3556671810023ff80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Sun, 29 Sep 2024 16:58:41 +0800 Subject: [PATCH 089/124] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=BF=AB=E7=85=A7?= =?UTF-8?q?=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsReportServiceImpl.java | 184 +++++++++++------- .../SalaryStatisticsReportWrapper.java | 44 ++--- .../impl/SalaryAcctEmployeeServiceImpl.java | 109 ++++------- .../sys/constant/SalarySysConstant.java | 11 ++ 4 files changed, 187 insertions(+), 161 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 42a65d485..ab16db7cc 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -54,6 +54,8 @@ import weaver.wechat.util.Utils; import java.util.*; import java.util.stream.Collectors; +import static com.engine.salary.sys.constant.SalarySysConstant.REPORT_ORGANIZATIN_TYPE; + /** * 薪酬统计报表 *

Copyright: Copyright (c) 2022

@@ -71,6 +73,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary public static final String LAST_INFO = "lastInfoList"; public static final String SAME_INFO = "sameInfoList"; + private boolean isRealOrg = "1".equals(getSalaryCacheService(user).get(REPORT_ORGANIZATIN_TYPE)); private SalaryStatisticsReportMapper getSalaryStatisticsReportMapper() { return MapperProxyFactory.getProxy(SalaryStatisticsReportMapper.class); @@ -197,16 +200,16 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary this.getSalaryStatisticsReportMapper().updateIgnoreNull(poNew); // 记录日志 - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setUser(user); - loggerContext.setTargetId(String.valueOf(poNew.getId())); - loggerContext.setTargetName(poNew.getReportName()); - loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "更新报表")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "更新报表")); - loggerContext.setOldValues(po); - loggerContext.setNewValues(poNew); - SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(poNew.getId())); + loggerContext.setTargetName(poNew.getReportName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "更新报表")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "更新报表")); + loggerContext.setOldValues(po); + loggerContext.setNewValues(poNew); + SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext); } else { List list = listByName(saveParam.getReportName()); if (CollectionUtils.isNotEmpty(list)) { @@ -217,15 +220,15 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary getSalaryStatisticsReportMapper().insertIgnoreNull(poNew); // 记录日志 - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setUser(user); - loggerContext.setTargetId(String.valueOf(poNew.getId())); - loggerContext.setTargetName(poNew.getReportName()); - loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "新增报表")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "新增报表")); - loggerContext.setNewValues(poNew); - SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(poNew.getId())); + loggerContext.setTargetName(poNew.getReportName()); + loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新增报表")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新增报表")); + loggerContext.setNewValues(poNew); + SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext); } return StringUtils.EMPTY; } @@ -305,16 +308,16 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary getSalaryStatisticsItemService(user).saveOrUpdateBatch(salaryStatisticsItemList); //记录日志 - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setUser(user); - loggerContext.setTargetId(String.valueOf(po.getId())); - loggerContext.setTargetName(po.getReportName()); - loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "更新报表")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "更新报表")); - loggerContext.setOldValues(oldPO); - loggerContext.setNewValues(po); - SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(po.getId())); + loggerContext.setTargetName(po.getReportName()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "更新报表")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "更新报表")); + loggerContext.setOldValues(oldPO); + loggerContext.setNewValues(po); + SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext); return StringUtils.EMPTY; } @@ -333,17 +336,17 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary getSalaryStatisticsReportMapper().deleteByIds(deleteIds); //删除薪资项 getSalaryStatisticsItemService(user).deleteByReportIds(deleteIds); - list.forEach(e -> { - // 记录日志 - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setUser(user); - loggerContext.setTargetId(String.valueOf(e.getId())); - loggerContext.setTargetName(e.getReportName()); - loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "删除报表")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "删除报表") + e.getReportName()); - SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext); - }); + list.forEach(e -> { + // 记录日志 + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(e.getId())); + loggerContext.setTargetName(e.getReportName()); + loggerContext.setOperateType(OperateTypeEnum.DELETE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "删除报表")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "删除报表") + e.getReportName()); + SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext); + }); } Map resultMap = new HashMap<>(2); @@ -396,8 +399,8 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary loggerContext.setTargetId(String.valueOf(po.getId())); loggerContext.setTargetName(po.getReportName()); 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(po); SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext); } @@ -479,7 +482,15 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary List salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryStatisticsReportParam(queryParam); // 设置dimensionValue为维度值 - SalaryStatisticsReportDataDTO salaryStatisticsReportData = SalaryStatisticsReportDataDTO.builder().list(salaryAcctEmployeeList).lastList(Collections.emptyList()).sameList(Collections.emptyList()).salaryStatisticsItemList(salaryStatisticsItemPOS).employeeId((long) user.getUID()).tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).dimensionValue(param.getDimensionValue()).build(); + SalaryStatisticsReportDataDTO salaryStatisticsReportData = SalaryStatisticsReportDataDTO.builder() + .list(salaryAcctEmployeeList) + .lastList(Collections.emptyList()) + .sameList(Collections.emptyList()) + .salaryStatisticsItemList(salaryStatisticsItemPOS) + .employeeId((long) user.getUID()) + .dimensionValue(param.getDimensionValue()) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build(); Map> resultMap = new HashMap<>(); List salaryAcctEmployeeIds = salaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); @@ -848,44 +859,78 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary Map lastEmpIdDepartIdMap = new HashMap<>(); Map sameEmpIdDepartIdMap = new HashMap<>(); Map departIdNameMap = new HashMap<>(); - simpleEmployeeList.forEach(employee -> { - if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) { - departIdNameMap.put(employee.getDepartmentId(), employee.getDepartmentName()); - departIds.add(employee.getDepartmentId()); - empIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId()); - } - }); - lastSimpleEmployeeList.forEach(employee -> { - if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) { - lastEmpIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId()); - } - }); - sameSimpleEmployeeList.forEach(employee -> { - if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) { - sameEmpIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId()); - } - }); + if (isRealOrg) { + simpleEmployeeList.forEach(employee -> { + if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) { + departIdNameMap.put(employee.getDepartmentId(), employee.getDepartmentName()); + departIds.add(employee.getDepartmentId()); + empIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId()); + } + }); + lastSimpleEmployeeList.forEach(employee -> { + if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) { + lastEmpIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId()); + } + }); + sameSimpleEmployeeList.forEach(employee -> { + if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) { + sameEmpIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId()); + } + }); + } else { + data.getList().forEach(employee -> { + if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) { + departIdNameMap.put(employee.getDepartmentId(), employee.getDepartmentName()); + departIds.add(employee.getDepartmentId()); + empIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId()); + } + }); + data.getLastList().forEach(employee -> { + if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) { + lastEmpIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId()); + } + }); + data.getSameList().forEach(employee -> { + if (employee.getDepartmentName() != null && employee.getDepartmentId() != null) { + sameEmpIdDepartIdMap.put(employee.getEmployeeId(), employee.getDepartmentId()); + } + }); + } String dimensionValue = data.getDimensionValue(); departIds.forEach(departId -> { if (dimensionValue == null) { - List departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); - List lastDepartEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); - List sameDepartEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); + List departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(po.getDepartmentId(), departId)).collect(Collectors.toList()); + List lastDepartEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(po.getDepartmentId(), departId)).collect(Collectors.toList()); + List sameDepartEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(po.getDepartmentId(), departId)).collect(Collectors.toList()); + if (isRealOrg) { + departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); + lastDepartEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); + sameDepartEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); + } Map temp = new HashMap<>(); temp.put(DM, departIdNameMap.get(departId)); temp.putAll(SalaryStatisticsReportBO.calculateItem(departEmployeePOS, lastDepartEmployeePOS, sameDepartEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); records.add(temp); } else if (StringUtils.equals(dimensionValue, departIdNameMap.get(departId))) { - List departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); + List departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(po.getDepartmentId(), departId)).collect(Collectors.toList()); + if (isRealOrg) { + data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); + } data.setListByDimensionValue(departEmployeePOS); } }); if (dimensionValue == null) { - List noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List noGroupingList = data.getList().stream().filter(po -> po.getDepartmentId() == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> po.getDepartmentId() == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> po.getDepartmentId() == null).collect(Collectors.toList()); + if (isRealOrg) { + noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + sameNoGroupingList = data.getSameList().stream().filter(po -> lastEmpIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + + } if (CollectionUtils.isNotEmpty(noGroupingList)) { Map noGrouping = new HashMap<>(); noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); @@ -893,7 +938,10 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary records.add(noGrouping); } } else if (StringUtils.equals(dimensionValue, "无分组")) { - List noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List noGroupingList = data.getList().stream().filter(po -> po.getDepartmentId() == null).collect(Collectors.toList()); + if(isRealOrg){ + noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + } data.setListByDimensionValue(noGroupingList); } diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index 22fb6261f..7556b7bf8 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -332,28 +332,28 @@ public class SalaryStatisticsReportWrapper extends Service { if (empDimensionOptional.isPresent()) { empDimensionId = empDimensionOptional.get(); } - if (StringUtils.isNotBlank(salaryReportIds) && salaryReportIds.contains(id + "")) { - //报表中缓存的条件 - salaryReportConditions = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id)); - if (StringUtils.isNotBlank(salaryReportConditions) && salaryReportConditions.contains(paramMd5)) { - Map result = getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5); - if (param.getDimensionId().equals(empDimensionId)) { - // 人员维度需要分页 - Map finalResultMap = new HashMap<>(); - PageInfo> pageInfo = (PageInfo>) result.get("pageInfo"); - PageInfo> finalPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize()); - finalPageInfo.setTotal(pageInfo.getList().size()); - finalPageInfo.setList(SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), pageInfo.getList())); - finalResultMap.put("pageInfo", finalPageInfo); - finalResultMap.put("columns", result.get("columns")); - finalResultMap.put("countResult", result.get("countResult")); - finalResultMap.put("reportId", id); - return finalResultMap; - } - - return result; - } - } +// if (StringUtils.isNotBlank(salaryReportIds) && salaryReportIds.contains(id + "")) { +// //报表中缓存的条件 +// salaryReportConditions = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id)); +// if (StringUtils.isNotBlank(salaryReportConditions) && salaryReportConditions.contains(paramMd5)) { +// Map result = getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5); +// if (param.getDimensionId().equals(empDimensionId)) { +// // 人员维度需要分页 +// Map finalResultMap = new HashMap<>(); +// PageInfo> pageInfo = (PageInfo>) result.get("pageInfo"); +// PageInfo> finalPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize()); +// finalPageInfo.setTotal(pageInfo.getList().size()); +// finalPageInfo.setList(SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), pageInfo.getList())); +// finalResultMap.put("pageInfo", finalPageInfo); +// finalResultMap.put("columns", result.get("columns")); +// finalResultMap.put("countResult", result.get("countResult")); +// finalResultMap.put("reportId", id); +// return finalResultMap; +// } +// +// return result; +// } +// } // 列表data diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index a36f2dd57..0dce7dbda 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -47,6 +47,8 @@ import weaver.hrm.User; import java.util.*; import java.util.stream.Collectors; +import static com.engine.salary.sys.constant.SalarySysConstant.REPORT_ORGANIZATIN_TYPE; + /** * 薪资核算人员 *

Copyright: Copyright (c) 2022

@@ -102,6 +104,11 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); } + private SalaryCacheService getSalaryCacheService(User user) { + return ServiceUtil.getService(SalaryCacheServiceImpl.class, user); + } + + private boolean isRealOrg = "1".equals(getSalaryCacheService(user).get(REPORT_ORGANIZATIN_TYPE)); @Override public List countBySalaryAcctRecordId(Collection salaryAcctRecordIds) { @@ -656,11 +663,6 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct lambdaQueryChainWrapper.setSalaryMonths(yearMonths); } - // 收入所得项目 -// if (CollectionUtils.isNotEmpty(param.getIncomeCategory())) { -// lambdaQueryChainWrapper.in(SalaryAcctEmployeePO::getIncomeCategory, param.getIncomeCategory().stream().map(Object::toString).collect(Collectors.toList())); -// } - //排除未归档数据 List salaryAcctRecordPOS = getSalaryAcctRecordService(user).listAll(); List salaryAcctRecordIds = salaryAcctRecordPOS.stream() @@ -690,70 +692,47 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct // 获取分部信息 List subCompanyIds = param.getSubCompany(); if (CollectionUtils.isNotEmpty(subCompanyIds)) { -// SubCompanyComInfo subCompanyComInfo = new SubCompanyComInfo(); -// List allSubcompanyIds = new ArrayList<>(); -// for (Long subCompanyId : subCompanyIds) { -// String organizationIds = Util.null2String(subCompanyId); -// String allChildSubcompanyId = subCompanyComInfo.getAllChildSubcompanyId(subCompanyId.toString(), organizationIds); -// allSubcompanyIds.addAll(Arrays.asList(allChildSubcompanyId.split(","))); -// } - employeeList = employeeList.stream().filter(emp -> subCompanyIds.contains(emp.getSubcompanyid())).collect(Collectors.toList()); + if (isRealOrg) { + employeeList = employeeList.stream().filter(emp -> subCompanyIds.contains(emp.getSubcompanyid())).collect(Collectors.toList()); + } else { + list.stream().filter(emp -> subCompanyIds.contains(emp.getSubcompanyId())).collect(Collectors.toList()); + } } // 部门过滤 List depart = param.getDepart(); if (CollectionUtils.isNotEmpty(depart)) { -// List allDepartIds = new ArrayList<>(); -// for (Long subDepartId : depart) { -// String ids = Util.null2String(subDepartId); -// try { -// String allDepartId = DepartmentComInfo.getAllChildDepartId(subDepartId.toString(), ids); -// allDepartIds.addAll(Arrays.asList(allDepartId.toString().split(","))); -// } catch (Exception e) { -// log.error("获取子部门失败", e); -// } -// } - employeeList = employeeList.stream().filter(emp -> depart.contains(emp.getDepartmentId())).collect(Collectors.toList()); + if (isRealOrg) { + employeeList = employeeList.stream().filter(emp -> depart.contains(emp.getDepartmentId())).collect(Collectors.toList()); + } else { + list = list.stream().filter(emp -> depart.contains(emp.getDepartmentId())).collect(Collectors.toList()); + } } - // 职级过滤 -// if (CollectionUtils.isNotEmpty(param.getGrade())) { -// Set employeeIdsByGradeFilter = new HashSet<>(); -// simpleEmployeeList.forEach(simpleEmployee -> { -// if (simpleEmployee.getGrade() != null && param.getGrade().contains(simpleEmployee.getGrade().getId())) { -// employeeIdsByGradeFilter.add(simpleEmployee.getEmployeeId()); -// } -// }); -// if (CollectionUtils.isEmpty(employeeIdsByGradeFilter)) { -// return Lists.newArrayList(); -// } -// list = list.stream().filter(po -> employeeIdsByGradeFilter.contains(po.getEmployeeId())).collect(Collectors.toList()); -// } // 岗位过滤 List position = param.getPosition(); if (CollectionUtils.isNotEmpty(position)) { - // Set employeeIdsByPostionFilter = new HashSet<>(); - // simpleEmployeeList.forEach(simpleEmployee -> { - // if (simpleEmployee.getPosition() != null && param.getPosition().contains(simpleEmployee.getPosition().getId())) { - // employeeIdsByPostionFilter.add(simpleEmployee.getEmployeeId()); - // } - // }); - // if (CollectionUtils.isEmpty(employeeIdsByPostionFilter)) { - // return Lists.newArrayList(); - // } - employeeList = employeeList.stream().filter(emp -> position.contains(emp.getJobtitleId())).collect(Collectors.toList()); + if (isRealOrg) { + employeeList = employeeList.stream().filter(emp -> position.contains(emp.getJobtitleId())).collect(Collectors.toList()); + } else { + list = list.stream().filter(emp -> position.contains(emp.getJobtitleId())).collect(Collectors.toList()); + } } // 人事状态过滤 if (CollectionUtils.isNotEmpty(param.getStatus())) { - Set employeeIdsByStatus = new HashSet<>(); - employeeList.forEach(simpleEmployee -> { - if (simpleEmployee.getStatus() != null && param.getStatus().contains(simpleEmployee.getStatus())) { - employeeIdsByStatus.add(simpleEmployee.getEmployeeId()); + if (isRealOrg) { + Set employeeIdsByStatus = new HashSet<>(); + employeeList.forEach(simpleEmployee -> { + if (simpleEmployee.getStatus() != null && param.getStatus().contains(simpleEmployee.getStatus())) { + employeeIdsByStatus.add(simpleEmployee.getEmployeeId()); + } + }); + if (CollectionUtils.isEmpty(employeeIdsByStatus)) { + return Lists.newArrayList(); } - }); - if (CollectionUtils.isEmpty(employeeIdsByStatus)) { - return Lists.newArrayList(); + list = list.stream().filter(po -> employeeIdsByStatus.contains(po.getEmployeeId())).collect(Collectors.toList()); + } else { + list = list.stream().filter(po -> po.getStatus() != null && param.getStatus().contains(po.getStatus())).collect(Collectors.toList()); } - list = list.stream().filter(po -> employeeIdsByStatus.contains(po.getEmployeeId())).collect(Collectors.toList()); } // 入职日期 if (CollectionUtils.isNotEmpty(param.getHiredate())) { @@ -769,27 +748,15 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct } list = list.stream().filter(po -> employeeIdsByHiredate.contains(po.getEmployeeId())).collect(Collectors.toList()); } -// // 离职日期 todo -// if (CollectionUtils.isNotEmpty(param.getLeavedate())) { -// Set employeeIdsByLeavedate = new HashSet<>(); -// simpleEmployeeList.forEach(simpleEmployee -> { -// -// if (simpleEmployee.get() != null && ) { -// employeeIdsByLeavedate.add(simpleEmployee.getEmployeeId()); -// } -// }); -// if (CollectionUtils.isEmpty(employeeIdsByLeavedate)) { -// return Lists.newArrayList(); -// } -// list = list.stream().filter(po -> employeeIdsByLeavedate.contains(po.getEmployeeId())).collect(Collectors.toList()); -// } // 人员 if (CollectionUtils.isNotEmpty(param.getEmployee())) { list = list.stream().filter(po -> param.getEmployee().contains(po.getEmployeeId())).collect(Collectors.toList()); } - Set empIds = SalaryEntityUtil.properties(employeeList, DataCollectionEmployee::getEmployeeId); - list = list.stream().filter(po -> empIds.contains(po.getEmployeeId())).collect(Collectors.toList()); + if(isRealOrg){ + Set empIds = SalaryEntityUtil.properties(employeeList, DataCollectionEmployee::getEmployeeId); + list = list.stream().filter(po -> empIds.contains(po.getEmployeeId())).collect(Collectors.toList()); + } return list; } diff --git a/src/com/engine/salary/sys/constant/SalarySysConstant.java b/src/com/engine/salary/sys/constant/SalarySysConstant.java index ff055b89e..443cd4fd5 100644 --- a/src/com/engine/salary/sys/constant/SalarySysConstant.java +++ b/src/com/engine/salary/sys/constant/SalarySysConstant.java @@ -145,4 +145,15 @@ public class SalarySysConstant { * 我的薪资福利工资单个税扣缴义务人显示状态 */ public static final String TAX_AGENT_SHOW_STATUS = "taxAgentShowStatus"; + + + /** + * 报表是否开启缓存,0:关闭 1:开启 + */ + public static final String REPORT_CACHE = "REPORT_CACHE"; + + /** + * 报表组织类型,null/0 :核算快照信息 1:实时组织信息 + */ + public static final String REPORT_ORGANIZATIN_TYPE = "REPORT_ORGANIZATIN_TYPE"; } From 13f085420824942fe466020df94731484c227a81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Sun, 29 Sep 2024 17:02:59 +0800 Subject: [PATCH 090/124] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsReportWrapper.java | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index 7556b7bf8..22fb6261f 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -332,28 +332,28 @@ public class SalaryStatisticsReportWrapper extends Service { if (empDimensionOptional.isPresent()) { empDimensionId = empDimensionOptional.get(); } -// if (StringUtils.isNotBlank(salaryReportIds) && salaryReportIds.contains(id + "")) { -// //报表中缓存的条件 -// salaryReportConditions = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id)); -// if (StringUtils.isNotBlank(salaryReportConditions) && salaryReportConditions.contains(paramMd5)) { -// Map result = getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5); -// if (param.getDimensionId().equals(empDimensionId)) { -// // 人员维度需要分页 -// Map finalResultMap = new HashMap<>(); -// PageInfo> pageInfo = (PageInfo>) result.get("pageInfo"); -// PageInfo> finalPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize()); -// finalPageInfo.setTotal(pageInfo.getList().size()); -// finalPageInfo.setList(SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), pageInfo.getList())); -// finalResultMap.put("pageInfo", finalPageInfo); -// finalResultMap.put("columns", result.get("columns")); -// finalResultMap.put("countResult", result.get("countResult")); -// finalResultMap.put("reportId", id); -// return finalResultMap; -// } -// -// return result; -// } -// } + if (StringUtils.isNotBlank(salaryReportIds) && salaryReportIds.contains(id + "")) { + //报表中缓存的条件 + salaryReportConditions = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id)); + if (StringUtils.isNotBlank(salaryReportConditions) && salaryReportConditions.contains(paramMd5)) { + Map result = getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5); + if (param.getDimensionId().equals(empDimensionId)) { + // 人员维度需要分页 + Map finalResultMap = new HashMap<>(); + PageInfo> pageInfo = (PageInfo>) result.get("pageInfo"); + PageInfo> finalPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize()); + finalPageInfo.setTotal(pageInfo.getList().size()); + finalPageInfo.setList(SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), pageInfo.getList())); + finalResultMap.put("pageInfo", finalPageInfo); + finalResultMap.put("columns", result.get("columns")); + finalResultMap.put("countResult", result.get("countResult")); + finalResultMap.put("reportId", id); + return finalResultMap; + } + + return result; + } + } // 列表data From 8c0bad80232807239452bf6d4109228e5d5adc29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 30 Sep 2024 10:37:27 +0800 Subject: [PATCH 091/124] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=BF=AB=E7=85=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsReportServiceImpl.java | 77 ++++++++++++++----- 1 file changed, 58 insertions(+), 19 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index ab16db7cc..ecceda7a9 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -796,38 +796,74 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary Map subComIdNameMap = new HashMap<>(); Map lastEmpIdSubComMap = new HashMap<>(); Map sameEmpIdSubComMap = new HashMap<>(); - comInfoMap.forEach((k, v) -> { - subComIdNameMap.put(v.getSubcompanyid(), v.getSubcompanyName()); - empIdSubComMap.put(k, v.getSubcompanyid()); - subComIds.add(v.getSubcompanyid()); - }); - lastComInfoMap.forEach((k, v) -> { - lastEmpIdSubComMap.put(k, v.getSubcompanyid()); - }); - sameComInfoMap.forEach((k, v) -> { - sameEmpIdSubComMap.put(k, v.getSubcompanyid()); - }); + + if (isRealOrg) { + comInfoMap.forEach((k, v) -> { + subComIdNameMap.put(v.getSubcompanyid(), v.getSubcompanyName()); + empIdSubComMap.put(k, v.getSubcompanyid()); + subComIds.add(v.getSubcompanyid()); + }); + lastComInfoMap.forEach((k, v) -> { + lastEmpIdSubComMap.put(k, v.getSubcompanyid()); + }); + sameComInfoMap.forEach((k, v) -> { + sameEmpIdSubComMap.put(k, v.getSubcompanyid()); + }); + } else { + data.getList().forEach(employee -> { + if (employee.getSubcompanyId() != null && employee.getSubcompanyId() != null) { + subComIdNameMap.put(employee.getSubcompanyId(), employee.getSubcompanyName()); + subComIds.add(employee.getDepartmentId()); + empIdSubComMap.put(employee.getEmployeeId(), employee.getSubcompanyId()); + } + }); + data.getLastList().forEach(employee -> { + if (employee.getSubcompanyId() != null && employee.getSubcompanyId() != null) { + lastEmpIdSubComMap.put(employee.getEmployeeId(), employee.getSubcompanyId()); + } + }); + data.getSameList().forEach(employee -> { + if (employee.getSubcompanyId() != null && employee.getSubcompanyId() != null) { + sameEmpIdSubComMap.put(employee.getEmployeeId(), employee.getSubcompanyId()); + } + }); + } + String dimensionValue = data.getDimensionValue(); subComIds.forEach(subComId -> { if (dimensionValue == null) { - List subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); - List lastSubComEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); - List sameSubComEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); + List subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(po.getSubcompanyId(), subComId)).collect(Collectors.toList()); + List lastSubComEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(po.getSubcompanyId(), subComId)).collect(Collectors.toList()); + List sameSubComEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(po.getSubcompanyId(), subComId)).collect(Collectors.toList()); + if (isRealOrg) { + subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); + lastSubComEmployeePOS = data.getLastList().stream().filter(po -> Objects.equals(lastEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); + sameSubComEmployeePOS = data.getSameList().stream().filter(po -> Objects.equals(sameEmpIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); + } Map temp = new HashMap<>(); temp.put(DM, subComIdNameMap.get(subComId)); temp.putAll(SalaryStatisticsReportBO.calculateItem(subComEmployeePOS, lastSubComEmployeePOS, sameSubComEmployeePOS, salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); records.add(temp); } else if (StringUtils.equals(dimensionValue, subComIdNameMap.get(subComId))) { - List subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); + List subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(po.getSubcompanyId(), subComId)).collect(Collectors.toList()); + if (isRealOrg) { + subComEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdSubComMap.get(po.getEmployeeId()), subComId)).collect(Collectors.toList()); + } data.setListByDimensionValue(subComEmployeePOS); } }); if (dimensionValue == null) { - List noGroupingList = data.getList().stream().filter(po -> empIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); - List sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + List noGroupingList = data.getList().stream().filter(po -> po.getSubcompanyId() == null).collect(Collectors.toList()); + List lastNoGroupingList = data.getLastList().stream().filter(po -> po.getSubcompanyId() == null).collect(Collectors.toList()); + List sameNoGroupingList = data.getSameList().stream().filter(po -> po.getSubcompanyId() == null).collect(Collectors.toList()); + if (isRealOrg) { + noGroupingList = data.getList().stream().filter(po -> empIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + lastNoGroupingList = data.getLastList().stream().filter(po -> lastEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + sameNoGroupingList = data.getSameList().stream().filter(po -> sameEmpIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + } + if (CollectionUtils.isNotEmpty(noGroupingList)) { Map noGrouping = new HashMap<>(); noGrouping.put(DM, SalaryI18nUtil.getI18nLabel(153462, "无分组")); @@ -836,6 +872,9 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary } } else if (StringUtils.equals(dimensionValue, "无分组")) { List noGroupingList = data.getList().stream().filter(po -> empIdSubComMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); + if (isRealOrg) { + noGroupingList = data.getList().stream().filter(po -> po.getSubcompanyId() == null).collect(Collectors.toList()); + } data.setListByDimensionValue(noGroupingList); } @@ -939,7 +978,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary } } else if (StringUtils.equals(dimensionValue, "无分组")) { List noGroupingList = data.getList().stream().filter(po -> po.getDepartmentId() == null).collect(Collectors.toList()); - if(isRealOrg){ + if (isRealOrg) { noGroupingList = data.getList().stream().filter(po -> empIdDepartIdMap.get(po.getEmployeeId()) == null).collect(Collectors.toList()); } data.setListByDimensionValue(noGroupingList); From ff44ddd8b11536de2a809aed86175fa059d77a02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 8 Oct 2024 14:19:02 +0800 Subject: [PATCH 092/124] =?UTF-8?q?=E5=91=98=E5=B7=A5=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../param/SalaryAcctEmployeeQueryParam.java | 5 ++ .../salaryacct/SalaryAcctEmployeeMapper.xml | 48 +++++++++++++++++-- .../SalaryStatisticsEmployeeServiceImpl.java | 19 +++----- 3 files changed, 56 insertions(+), 16 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java index 2d532855e..977f1572e 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java @@ -7,7 +7,9 @@ import com.engine.salary.util.valid.DataCheck; import lombok.*; import java.util.Collection; +import java.util.Date; import java.util.List; +import java.util.Set; /** * 薪资核算人员列表查询条件 @@ -59,4 +61,7 @@ public class SalaryAcctEmployeeQueryParam extends BaseQueryParam { private List ids; private String workcode; + + private List taxAgentIds; + private Set salaryMonths; } diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml index 28f8e7779..86781c4d3 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml @@ -521,7 +521,6 @@ LEFT JOIN hrmdepartment d ON d.id = e.departmentid LEFT JOIN hrmsubcompany c ON c.id = e.subcompanyid1 WHERE delete_type = 0 - AND salary_acct_record_id = #{param.salaryAcctRecordId} @@ -538,7 +537,6 @@ LEFT JOIN hrmdepartment d ON d.id = e.departmentid LEFT JOIN hrmsubcompany c ON c.id = e.subcompanyid1 WHERE delete_type = 0 - AND salary_acct_record_id = #{param.salaryAcctRecordId} @@ -555,7 +553,6 @@ LEFT JOIN hrmdepartment d ON d.id = e.departmentid LEFT JOIN hrmsubcompany c ON c.id = e.subcompanyid1 WHERE delete_type = 0 - AND salary_acct_record_id = #{param.salaryAcctRecordId} @@ -564,6 +561,9 @@ + + AND t.salary_acct_record_id = #{param.salaryAcctRecordId} + AND t.id IN @@ -573,6 +573,18 @@ AND t.tax_agent_id = #{param.taxAgentId} + + AND t.tax_agent_id IN + + #{taxAgentId} + + + + AND t.salary_month IN + + #{salaryMonth} + + -- 分部 AND t.subcompany_id IN @@ -625,6 +637,9 @@ + + AND t.salary_acct_record_id = #{param.salaryAcctRecordId} + AND t.id IN @@ -634,6 +649,18 @@ AND t.tax_agent_id = #{param.taxAgentId} + + AND t.tax_agent_id IN + + #{taxAgentId} + + + + AND t.salary_month IN + + #{salaryMonth} + + -- 分部 AND t.subcompany_id IN @@ -684,6 +711,9 @@ + + AND t.salary_acct_record_id = #{param.salaryAcctRecordId} + AND t.id IN @@ -693,6 +723,18 @@ AND t.tax_agent_id = #{param.taxAgentId} + + AND t.tax_agent_id IN + + #{taxAgentId} + + + + AND t.salary_month IN + + #{salaryMonth} + + -- 分部 AND t.subcompany_id IN diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java index 3a6e00071..2e7663392 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.util.NumberUtil; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.salaryacct.param.SalaryAcctEmployeeQueryParam; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; @@ -33,7 +34,6 @@ import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.google.common.collect.Sets; import com.wbi.util.Util; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -108,7 +108,8 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala .collect(Collectors.toSet()); // 查询薪资核算人员 - List salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listByTaxAgentAndSalaryMonth(taxAgentIds, salaryMonths); + SalaryAcctEmployeeQueryParam salaryAcctEmployeeQueryParam = SalaryAcctEmployeeQueryParam.builder().salaryMonths(salaryMonths).taxAgentIds(taxAgentIds).build(); + List salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listByParam(salaryAcctEmployeeQueryParam); if (CollectionUtils.isEmpty(salaryAcctEmployeeList)) { return page; } @@ -119,15 +120,8 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala // // 外部人员id // Set extEmployeeIds = Sets.newHashSet(); // 内部人员id - Set innerEmployeeIds = Sets.newHashSet(); - for (SalaryAcctEmployeePO sae : salaryAcctEmployeeList) { -// if (EmployeeTypeEnum.EXT_EMPLOYEE.getValue().equals(sae.getEmployeeType())) { -// extEmployeeIds.add(sae.getEmployeeId()); -// } else if (EmployeeTypeEnum.ORGANIZATION.getValue().equals(sae.getEmployeeType())) { -// innerEmployeeIds.add(sae.getEmployeeId()); -// } - innerEmployeeIds.add(sae.getEmployeeId()); - } + Set innerEmployeeIds = salaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getEmployeeId).collect(Collectors.toCollection(LinkedHashSet::new)); + // 3.关键字搜索参数 if (StringUtils.isNotEmpty(queryParam.getKeyword())) { // if (CollectionUtils.isNotEmpty(extEmployeeIds)) { @@ -158,10 +152,9 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala } } - List innerEmployeeIdList = innerEmployeeIds.stream().sorted(Comparator.comparing(e -> e)).collect(Collectors.toList()); // List extEmployeeIdList = extEmployeeIds.stream().sorted(Comparator.comparing(e -> e)).collect(Collectors.toList()); // 排序,内部员工优先 - list = innerEmployeeIdList.stream().map(e -> SalaryStatisticsEmployeeListDTO.builder() + list = innerEmployeeIds.stream().map(e -> SalaryStatisticsEmployeeListDTO.builder() .id(e) // .employeeType(EmployeeTypeEnum.ORGANIZATION.getValue()) .build()).collect(Collectors.toList()); From edb07052b5a1151a640148fdf78bf1b7a222b8fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 8 Oct 2024 14:36:18 +0800 Subject: [PATCH 093/124] =?UTF-8?q?=E5=91=98=E5=B7=A5=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/sys/constant/SalarySysConstant.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/sys/constant/SalarySysConstant.java b/src/com/engine/salary/sys/constant/SalarySysConstant.java index 443cd4fd5..6f35124c3 100644 --- a/src/com/engine/salary/sys/constant/SalarySysConstant.java +++ b/src/com/engine/salary/sys/constant/SalarySysConstant.java @@ -153,7 +153,7 @@ public class SalarySysConstant { public static final String REPORT_CACHE = "REPORT_CACHE"; /** - * 报表组织类型,null/0 :核算快照信息 1:实时组织信息 + * 报表组织类型,null/0 :核算时组织信息 1:实时组织信息 */ public static final String REPORT_ORGANIZATIN_TYPE = "REPORT_ORGANIZATIN_TYPE"; } From ff5419f2bb1a1431cfd97a8ad634ebc9f8d00da3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 8 Oct 2024 15:45:12 +0800 Subject: [PATCH 094/124] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SalaryStatisticsEmployeeServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java index 2e7663392..3ec96c6dc 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java @@ -315,7 +315,8 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala .collect(Collectors.toSet()); // 查询薪资核算人员 - List salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listByTaxAgentAndSalaryMonth(taxAgentIds, salaryMonths); + SalaryAcctEmployeeQueryParam salaryAcctEmployeeQueryParam = SalaryAcctEmployeeQueryParam.builder().salaryMonths(salaryMonths).taxAgentIds(taxAgentIds).build(); + List salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listByParam(salaryAcctEmployeeQueryParam); if (CollectionUtils.isNotEmpty(queryParam.getSubCompanyIds()) || CollectionUtils.isNotEmpty(queryParam.getDepartmentIds()) || StringUtils.isNotBlank(queryParam.getKeyword())) { // 根据分部、部门筛选 List employeeList = getSalaryEmployeeService(user).listBySubCompanyOrDepartment(queryParam.getSubCompanyIds(), queryParam.getDepartmentIds()); @@ -336,8 +337,7 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala if (CollectionUtils.isNotEmpty(queryParam.getIds())) { salaryAcctEmployeeList = salaryAcctEmployeeList.stream().filter(emp -> queryParam.getIds().contains(emp.getId())).collect(Collectors.toList()); } - salaryAcctEmployeeList = salaryAcctEmployeeList.stream().sorted(Comparator.comparing(SalaryAcctEmployeePO::getSalaryMonth)).collect(Collectors.toList()); - Collections.reverse(salaryAcctEmployeeList); + salaryAcctEmployeeList = salaryAcctEmployeeList.stream().sorted(Comparator.comparing(SalaryAcctEmployeePO::getSalaryMonth).reversed()).collect(Collectors.toList()); PageInfo SalaryAcctEmployeePageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), salaryAcctEmployeeList); if (queryParam.isExport()) { SalaryAcctEmployeePageInfo.setList(salaryAcctEmployeeList); From 61dee5d3a122d1f3ddb1d3b2d85b38a823de81d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 8 Oct 2024 15:48:33 +0800 Subject: [PATCH 095/124] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SalaryStatisticsEmployeeServiceImpl.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java index 3ec96c6dc..57a8d103d 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java @@ -288,9 +288,6 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala @Override public PageInfo listSalaryAcctEmp(SalaryStatisticsEmployeeSalaryQueryParam queryParam) { - List list = Collections.emptyList(); - PageInfo page = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), list, SalaryStatisticsEmployeeListDTO.class); - // 1.分权处理, 首先获取个税扣缴义务人参数 Collection taxAgentViews = getTaxAgentService(user).listAllTaxAgents((long) user.getUID()); List taxAgentIds = Objects.isNull(taxAgentViews) ? Lists.newArrayList() : taxAgentViews.stream().map(TaxAgentPO::getId).collect(Collectors.toList()); From a40188659fe2af6f077d721f840be319deb76862 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 9 Oct 2024 13:21:28 +0800 Subject: [PATCH 096/124] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=BF=AB=E7=85=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsReportServiceImpl.java | 9 +++- .../SalaryStatisticsReportWrapper.java | 44 +++++++++---------- .../sys/service/SalarySysConfService.java | 2 + .../impl/SalarySysConfServiceImpl.java | 6 +++ 4 files changed, 37 insertions(+), 24 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index ecceda7a9..8886cfa6f 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -33,6 +33,8 @@ import com.engine.salary.report.service.SalaryStatisticsReportService; import com.engine.salary.report.util.ReportTimeUtil; import com.engine.salary.service.*; import com.engine.salary.service.impl.*; +import com.engine.salary.sys.service.SalarySysConfService; +import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.*; import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; @@ -73,7 +75,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary public static final String LAST_INFO = "lastInfoList"; public static final String SAME_INFO = "sameInfoList"; - private boolean isRealOrg = "1".equals(getSalaryCacheService(user).get(REPORT_ORGANIZATIN_TYPE)); + private final boolean isRealOrg = "1".equals(getSalarySysConfService(user).getValueByCode(REPORT_ORGANIZATIN_TYPE)); private SalaryStatisticsReportMapper getSalaryStatisticsReportMapper() { return MapperProxyFactory.getProxy(SalaryStatisticsReportMapper.class); @@ -115,6 +117,9 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary return ServiceUtil.getService(SalaryCacheServiceImpl.class, user); } + private SalarySysConfService getSalarySysConfService(User user) { + return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); + } // private ExtEmployeeService extEmployeeService; // // private HrmCommonEmployeeService hrmCommonEmployeeService; @@ -954,7 +959,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary } else if (StringUtils.equals(dimensionValue, departIdNameMap.get(departId))) { List departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(po.getDepartmentId(), departId)).collect(Collectors.toList()); if (isRealOrg) { - data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); + departEmployeePOS = data.getList().stream().filter(po -> Objects.equals(empIdDepartIdMap.get(po.getEmployeeId()), departId)).collect(Collectors.toList()); } data.setListByDimensionValue(departEmployeePOS); } diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index 22fb6261f..7556b7bf8 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -332,28 +332,28 @@ public class SalaryStatisticsReportWrapper extends Service { if (empDimensionOptional.isPresent()) { empDimensionId = empDimensionOptional.get(); } - if (StringUtils.isNotBlank(salaryReportIds) && salaryReportIds.contains(id + "")) { - //报表中缓存的条件 - salaryReportConditions = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id)); - if (StringUtils.isNotBlank(salaryReportConditions) && salaryReportConditions.contains(paramMd5)) { - Map result = getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5); - if (param.getDimensionId().equals(empDimensionId)) { - // 人员维度需要分页 - Map finalResultMap = new HashMap<>(); - PageInfo> pageInfo = (PageInfo>) result.get("pageInfo"); - PageInfo> finalPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize()); - finalPageInfo.setTotal(pageInfo.getList().size()); - finalPageInfo.setList(SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), pageInfo.getList())); - finalResultMap.put("pageInfo", finalPageInfo); - finalResultMap.put("columns", result.get("columns")); - finalResultMap.put("countResult", result.get("countResult")); - finalResultMap.put("reportId", id); - return finalResultMap; - } - - return result; - } - } +// if (StringUtils.isNotBlank(salaryReportIds) && salaryReportIds.contains(id + "")) { +// //报表中缓存的条件 +// salaryReportConditions = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id)); +// if (StringUtils.isNotBlank(salaryReportConditions) && salaryReportConditions.contains(paramMd5)) { +// Map result = getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5); +// if (param.getDimensionId().equals(empDimensionId)) { +// // 人员维度需要分页 +// Map finalResultMap = new HashMap<>(); +// PageInfo> pageInfo = (PageInfo>) result.get("pageInfo"); +// PageInfo> finalPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize()); +// finalPageInfo.setTotal(pageInfo.getList().size()); +// finalPageInfo.setList(SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), pageInfo.getList())); +// finalResultMap.put("pageInfo", finalPageInfo); +// finalResultMap.put("columns", result.get("columns")); +// finalResultMap.put("countResult", result.get("countResult")); +// finalResultMap.put("reportId", id); +// return finalResultMap; +// } +// +// return result; +// } +// } // 列表data diff --git a/src/com/engine/salary/sys/service/SalarySysConfService.java b/src/com/engine/salary/sys/service/SalarySysConfService.java index 91eab5317..6b78ceca2 100644 --- a/src/com/engine/salary/sys/service/SalarySysConfService.java +++ b/src/com/engine/salary/sys/service/SalarySysConfService.java @@ -40,6 +40,8 @@ public interface SalarySysConfService { SalarySysConfPO getOneByCode(String code); + String getValueByCode(String code); + List listSome(SalarySysConfPO build); void save(SalarySysConfPO salarySysConfPO); diff --git a/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java b/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java index 956e6f7cd..64771e07d 100644 --- a/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java +++ b/src/com/engine/salary/sys/service/impl/SalarySysConfServiceImpl.java @@ -216,6 +216,12 @@ public class SalarySysConfServiceImpl extends Service implements SalarySysConfSe return getSalarySysConfMapper().getOneByCode(code); } + @Override + public String getValueByCode(String code) { + SalarySysConfPO confPO = getSalarySysConfMapper().getOneByCode(code); + return confPO == null ? "" : confPO.getConfValue(); + } + @Override public List listSome(SalarySysConfPO po) { return getSalarySysConfMapper().listSome(po); From 3a128a4c5be86862673e1dff9ecbc0b7afe7ec1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 9 Oct 2024 14:59:33 +0800 Subject: [PATCH 097/124] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=BF=AB=E7=85=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsReportWrapper.java | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index 7556b7bf8..22fb6261f 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -332,28 +332,28 @@ public class SalaryStatisticsReportWrapper extends Service { if (empDimensionOptional.isPresent()) { empDimensionId = empDimensionOptional.get(); } -// if (StringUtils.isNotBlank(salaryReportIds) && salaryReportIds.contains(id + "")) { -// //报表中缓存的条件 -// salaryReportConditions = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id)); -// if (StringUtils.isNotBlank(salaryReportConditions) && salaryReportConditions.contains(paramMd5)) { -// Map result = getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5); -// if (param.getDimensionId().equals(empDimensionId)) { -// // 人员维度需要分页 -// Map finalResultMap = new HashMap<>(); -// PageInfo> pageInfo = (PageInfo>) result.get("pageInfo"); -// PageInfo> finalPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize()); -// finalPageInfo.setTotal(pageInfo.getList().size()); -// finalPageInfo.setList(SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), pageInfo.getList())); -// finalResultMap.put("pageInfo", finalPageInfo); -// finalResultMap.put("columns", result.get("columns")); -// finalResultMap.put("countResult", result.get("countResult")); -// finalResultMap.put("reportId", id); -// return finalResultMap; -// } -// -// return result; -// } -// } + if (StringUtils.isNotBlank(salaryReportIds) && salaryReportIds.contains(id + "")) { + //报表中缓存的条件 + salaryReportConditions = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id)); + if (StringUtils.isNotBlank(salaryReportConditions) && salaryReportConditions.contains(paramMd5)) { + Map result = getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5); + if (param.getDimensionId().equals(empDimensionId)) { + // 人员维度需要分页 + Map finalResultMap = new HashMap<>(); + PageInfo> pageInfo = (PageInfo>) result.get("pageInfo"); + PageInfo> finalPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize()); + finalPageInfo.setTotal(pageInfo.getList().size()); + finalPageInfo.setList(SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), pageInfo.getList())); + finalResultMap.put("pageInfo", finalPageInfo); + finalResultMap.put("columns", result.get("columns")); + finalResultMap.put("countResult", result.get("countResult")); + finalResultMap.put("reportId", id); + return finalResultMap; + } + + return result; + } + } // 列表data From 2ba4bb72db413c1ebf11926c1d147d0484658c29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 9 Oct 2024 18:10:38 +0800 Subject: [PATCH 098/124] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=85=A5=E8=81=8C=E6=97=A5=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/service/impl/SalaryStatisticsEmployeeServiceImpl.java | 1 + .../salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java | 1 + 2 files changed, 2 insertions(+) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java index 57a8d103d..5728f0886 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java @@ -278,6 +278,7 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala map.put("jobTitle", Util.null2String(emp.getJobtitleName())); map.put("status", Util.null2String(NumberUtil.isNumber(emp.getStatus()) ? SalaryEmployeeStatusEnum.parseByValue(Integer.valueOf(emp.getStatus())).getDefaultLabel() : null)); map.put("workCode", Util.null2String(emp.getWorkcode())); + map.put("companystartdate", Util.null2String(emp.getCompanystartdate())); // IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(Integer.parseInt(se.getIncomeCategory())); // map.put("incomeCategory", Objects.isNull(incomeCategoryEnum) ? "" : SalaryI18nUtil.getI18nLabel(incomeCategoryEnum.getLabelId(), incomeCategoryEnum.getDefaultLabel())); diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java index 66eeff817..646600f08 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java @@ -136,6 +136,7 @@ public class SalaryStatisticsEmployeeWrapper extends Service { columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "岗位"), "jobTitle")); columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "员工状态"), "status")); columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "工号"), "workCode")); + columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "入职日期"), "companystartdate")); } columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86184, "次数"), "acctTimes").setDisplay(WeaBoolAttr.FALSE)); // columns.add(new WeaTableColumn("100px",SalaryI18nUtil.getI18nLabel( 121908, "收入所得项目"), "incomeCategory")); From 861cda00faf7db815ca8a68c0371f4bd481b9d58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 10 Oct 2024 11:39:22 +0800 Subject: [PATCH 099/124] =?UTF-8?q?1=E3=80=81=E6=89=B9=E9=87=8F=E9=94=81?= =?UTF-8?q?=E5=AE=9A=E3=80=81=E6=89=B9=E9=87=8F=E8=A7=A3=E9=94=81=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E4=BA=BA=E5=91=98=E7=9A=84=E6=89=80=E5=9C=A8=E8=A1=8C?= =?UTF-8?q?=E7=9A=84=E5=B7=A5=E8=B5=84=E9=A1=B9=E7=9B=AE=EF=BC=8C=E9=9C=80?= =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E4=BA=BA=E5=91=98=E7=9A=84=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E6=9D=A5=E8=AE=BE=E7=BD=AE=E3=80=82=202=E3=80=81=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E8=96=AA=E8=B5=84=E9=A1=B9=E7=9B=AE=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=B8=8B=E5=BD=93=E5=89=8D=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E8=A1=A8=E5=A4=B4=E8=83=BD=E5=90=A6=E8=87=AA=E5=8A=A8=E4=B8=BA?= =?UTF-8?q?=E4=B8=8A=E6=AC=A1=E9=80=89=E6=8B=A9=E7=9A=84=E8=A1=A8=E5=A4=B4?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../po/SalaryAcctResultTemplatePO.java | 7 ++ .../SalaryAcctResultTemplateMapper.xml | 21 +++++ .../service/SalaryAcctExcelService.java | 2 +- .../SalaryAcctResultTemplateService.java | 2 +- .../impl/SalaryAcctExcelServiceImpl.java | 83 ++++++++++++------- .../SalaryAcctResultTemplateServiceImpl.java | 4 +- .../salary/web/SalaryAcctController.java | 10 +-- 7 files changed, 92 insertions(+), 37 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultTemplatePO.java b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultTemplatePO.java index a8d493a01..d5c4343f9 100644 --- a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultTemplatePO.java +++ b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultTemplatePO.java @@ -18,6 +18,7 @@ import java.util.Date; @NoArgsConstructor @Builder @Data +//hrsa_acct_result_template public class SalaryAcctResultTemplatePO { /** * 主键id @@ -29,6 +30,11 @@ public class SalaryAcctResultTemplatePO { */ private String templateName; + /** + * 模板类型, 0:导出模板 1:公共导出模板 2:导入模板 + */ + private Integer type; + /** * 薪资账套id */ @@ -51,4 +57,5 @@ public class SalaryAcctResultTemplatePO { //主键id集合 private Collection ids; + private Collection types; } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultTemplateMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultTemplateMapper.xml index 55c41dc1c..bd1ba58d5 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultTemplateMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultTemplateMapper.xml @@ -11,6 +11,7 @@ + @@ -24,6 +25,7 @@ , t.template_name , t.tenant_key , t.update_time + , t.type @@ -75,12 +77,21 @@ AND update_time = #{updateTime} + + AND type = #{type} + AND id IN #{id} + + AND type IN + + #{type} + + ORDER BY id DESC @@ -117,6 +128,9 @@ update_time, + + type, + @@ -146,6 +160,9 @@ #{updateTime}, + + #{type}, + @@ -161,6 +178,7 @@ template_name=#{templateName}, tenant_key=#{tenantKey}, update_time=#{updateTime}, + type=#{type}, WHERE id = #{id} AND delete_type = 0 @@ -194,6 +212,9 @@ update_time=#{updateTime}, + + type=#{type}, + WHERE id = #{id} AND delete_type = 0 diff --git a/src/com/engine/salary/service/SalaryAcctExcelService.java b/src/com/engine/salary/service/SalaryAcctExcelService.java index 44aed9df9..e23815ba3 100644 --- a/src/com/engine/salary/service/SalaryAcctExcelService.java +++ b/src/com/engine/salary/service/SalaryAcctExcelService.java @@ -117,7 +117,7 @@ public interface SalaryAcctExcelService { ExcelPreviewDTO previewImportSalaryAcctResult(SalaryAcctImportParam param); - void cacheImportField(List salaryItems); + void cacheImportField(SalaryAcctResultTemplateSaveParam param); void cacheExportField(List salaryItems); diff --git a/src/com/engine/salary/service/SalaryAcctResultTemplateService.java b/src/com/engine/salary/service/SalaryAcctResultTemplateService.java index 7696cb4bf..a2b4c9c4a 100644 --- a/src/com/engine/salary/service/SalaryAcctResultTemplateService.java +++ b/src/com/engine/salary/service/SalaryAcctResultTemplateService.java @@ -75,5 +75,5 @@ public interface SalaryAcctResultTemplateService { * @param salarySobId * @return */ - List listBySalarySobId(Long salarySobId); + List listBySalarySobId(Long salarySobId,List types); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 01aee1e36..aef1bb7c3 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -591,11 +591,12 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // .build()) // .collect(Collectors.toList()); // 缓存勾选 - String cacheKey = user.getUID() + SalaryItemConstant.RESULT_IMPORT_FIELD_SIGN; - String cacheValue = (String) Util_DataCache.getObjVal(cacheKey); - List checkItems = JsonUtil.parseList(cacheValue, Long.class) == null ? new ArrayList<>() : JsonUtil.parseList(cacheValue, Long.class); - // 转换成dto -// return SalaryAcctImportFieldDTO.builder().formulaItems(formulaItems).sqlItems(sqlItems).inputItems(inputItems).checkItems(checkItems).build(); + List checkItems = new ArrayList<>(); + List salaryAcctResultTemplatePOS = getSalaryAcctResultTemplateService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId(), Arrays.asList(2)); + if (CollectionUtils.isNotEmpty(salaryAcctResultTemplatePOS)) { + String items = salaryAcctResultTemplatePOS.get(0).getSalaryItemIds(); + checkItems = Arrays.stream(items.split(",")).map(Long::valueOf).collect(Collectors.toList()); + } return SalaryAcctImportFieldDTO.builder().itemsByGroup(itemsByGroup).checkItems(checkItems).build(); } @@ -667,18 +668,22 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc @Override public XSSFWorkbook exportImportTemplate(SalaryAcctImportTemplateParam param) { -// ValidUtil.doValidator(param); - // 从缓存中获取所选的薪资项目 - String cacheKey = user.getUID() + SalaryItemConstant.RESULT_IMPORT_FIELD_SIGN; - String cacheValue = (String) Util_DataCache.getObjVal(cacheKey); - List checkItems = JsonUtil.parseList(cacheValue, Long.class) == null ? new ArrayList<>() : JsonUtil.parseList(cacheValue, Long.class); + + // 查询薪资核算记录 + SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(param.getSalaryAcctRecordId()); + if (Objects.isNull(salaryAcctRecordPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); + } + + List checkItems = new ArrayList<>(); + List salaryAcctResultTemplatePOS = getSalaryAcctResultTemplateService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId(), Arrays.asList(2)); + if (CollectionUtils.isNotEmpty(salaryAcctResultTemplatePOS)) { + String items = salaryAcctResultTemplatePOS.get(0).getSalaryItemIds(); + checkItems = Arrays.stream(items.split(",")).map(Long::valueOf).collect(Collectors.toList()); + } + // 必须选择导入模板所需的薪资项目 if (CollectionUtils.isEmpty(checkItems)) { - // 获取所有可以选择的薪资项目 - SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(param.getSalaryAcctRecordId()); - if (Objects.isNull(salaryAcctRecordPO)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); - } // 查询薪资核算记录所用的薪资账套的薪资项目副本 List salarySobItems = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); List salaryItemIds = SalaryEntityUtil.properties(salarySobItems, SalarySobItemPO::getSalaryItemId, Collectors.toList()); @@ -688,11 +693,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc checkItems = salaryItemIds; } param.setSalaryItemIds(checkItems); - // 查询薪资核算记录 - SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(param.getSalaryAcctRecordId()); - if (Objects.isNull(salaryAcctRecordPO)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); - } + // // 模板表头(默认必带"个税扣缴义务人"、"姓名") // List headerList = Lists.newArrayList(SalaryI18nUtil.getI18nLabel(85429, "姓名"), // "部门", @@ -976,9 +977,32 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc } @Override - public void cacheImportField(List salaryItems) { - String cacheKey = user.getUID() + SalaryItemConstant.RESULT_IMPORT_FIELD_SIGN; - Util_DataCache.setObjVal(cacheKey, JsonUtil.toJsonString(salaryItems)); + public void cacheImportField(SalaryAcctResultTemplateSaveParam saveParam) { + Long salaryAcctRecordId = saveParam.getSalaryAcctRecordId(); + SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salaryAcctRecordId); + if (salaryAcctRecordPO == null) { + throw new SalaryRunTimeException("薪资核算记录不存在"); + } + + List salaryAcctResultTemplatePOS = getSalaryAcctResultTemplateService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId(), Collections.singletonList(2)); + if (CollectionUtils.isNotEmpty(salaryAcctResultTemplatePOS)) { + salaryAcctResultTemplatePOS.forEach(templatePO -> getSalaryAcctResultTemplateService(user).deleteById(templatePO.getId())); + } + + Date now = new Date(); + SalaryAcctResultTemplatePO templatePO = SalaryAcctResultTemplatePO.builder() + .id(IdGenerator.generate()) + .type(2) + .salarySobId(salaryAcctRecordPO.getSalarySobId()) + .salaryItemIds(StringUtils.join(saveParam.getSalaryItemIds(), ",")) + .templateName("") + .creator((long) user.getUID()) + .createTime(now) + .updateTime(now) + .deleteType(0) + .build(); + getSalaryAcctResultTemplateService(user).insertIgnoreNull(templatePO); + } @Override @@ -1467,7 +1491,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc throw new SalaryRunTimeException("薪资核算记录不存在"); } saveParam.setSalarySobId(salaryAcctRecordPO.getSalarySobId()); - List templateBySobId = getSalaryAcctResultTemplateService(user).listBySalarySobId(saveParam.getSalarySobId()); + List templateBySobId = getSalaryAcctResultTemplateService(user).listBySalarySobId(saveParam.getSalarySobId(), Arrays.asList(0, 1)); if (saveParam.getId() != null) { Optional saveNameOptional = templateBySobId.stream().filter(po -> po.getTemplateName().equals(saveParam.getTemplateName()) && !po.getId().equals(saveParam.getId())).findFirst(); if (saveNameOptional.isPresent()) { @@ -1480,6 +1504,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc } salaryAcctResultTemplatePO.setSalaryItemIds(StringUtils.join(saveParam.getSalaryItemIds(), ",")); salaryAcctResultTemplatePO.setTemplateName(saveParam.getTemplateName()); + salaryAcctResultTemplatePO.setType(0); salaryAcctResultTemplatePO.setUpdateTime(new Date()); getSalaryAcctResultTemplateService(user).update(salaryAcctResultTemplatePO); } else { @@ -1489,16 +1514,18 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc } // 新建 Date now = new Date(); - getSalaryAcctResultTemplateService(user).insertIgnoreNull(SalaryAcctResultTemplatePO.builder() + SalaryAcctResultTemplatePO templatePO = SalaryAcctResultTemplatePO.builder() .id(IdGenerator.generate()) + .type(0) .salarySobId(saveParam.getSalarySobId()) .salaryItemIds(StringUtils.join(saveParam.getSalaryItemIds(), ",")) .templateName(saveParam.getTemplateName()) - .creator(Long.valueOf(user.getUID())) + .creator((long) user.getUID()) .createTime(now) .updateTime(now) .deleteType(0) - .build()); + .build(); + getSalaryAcctResultTemplateService(user).insertIgnoreNull(templatePO); } } @@ -1525,7 +1552,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc if (salaryAcctRecordPO == null) { throw new SalaryRunTimeException("薪资核算记录为空"); } - List salaryAcctResultTemplatePOS = getSalaryAcctResultTemplateService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + List salaryAcctResultTemplatePOS = getSalaryAcctResultTemplateService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId(), Arrays.asList(0, 1)); if (StringUtils.isNotBlank(param.getTemplateName())) { salaryAcctResultTemplatePOS = salaryAcctResultTemplatePOS.stream().filter(po -> po.getTemplateName().contains(param.getTemplateName())).collect(Collectors.toList()); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultTemplateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultTemplateServiceImpl.java index c79f314f8..219d971f6 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultTemplateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultTemplateServiceImpl.java @@ -63,10 +63,10 @@ public class SalaryAcctResultTemplateServiceImpl extends Service implements Sala } @Override - public List listBySalarySobId(Long salarySobId) { + public List listBySalarySobId(Long salarySobId,List types) { if (salarySobId == null) { return Collections.emptyList(); } - return getSalaryAcctResultTemplateMapper().listSome(SalaryAcctResultTemplatePO.builder().salarySobId(salarySobId).build()); + return getSalaryAcctResultTemplateMapper().listSome(SalaryAcctResultTemplatePO.builder().salarySobId(salarySobId).types(types).build()); } } diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 49fba1129..c8739df1d 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -167,7 +167,7 @@ public class SalaryAcctController { @GET @Path("/compareSobConfig") @Produces(MediaType.APPLICATION_JSON) - public String compareSobConfig(@Context HttpServletRequest request, @Context HttpServletResponse response,@QueryParam(value = "id") Long id) { + public String compareSobConfig(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult(user).run(getSalaryAcctRecordWrapper(user)::compareSobConfig, id); } @@ -181,7 +181,7 @@ public class SalaryAcctController { @GET @Path("/updateSobConfig") @Produces(MediaType.APPLICATION_JSON) - public String updateSobConfig(@Context HttpServletRequest request, @Context HttpServletResponse response,@QueryParam(value = "id") Long id) { + public String updateSobConfig(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult(user).run(getSalaryAcctRecordWrapper(user)::updateSobConfig, id); } @@ -583,9 +583,9 @@ public class SalaryAcctController { @POST @Path("/acctresult/cacheImportField") @Produces(MediaType.APPLICATION_JSON) - public String cacheImportField(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctImportParam param) { + public String cacheImportField(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctResultTemplateSaveParam param) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult, String>(user).run(getSalaryAcctExcelService(user)::cacheImportField, param.getSalaryItems()); + return new ResponseResult(user).run(getSalaryAcctExcelService(user)::cacheImportField, param); } // 薪资核算导出字段缓存 @@ -630,7 +630,7 @@ public class SalaryAcctController { @Produces(MediaType.APPLICATION_JSON) public String exportTemplateList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctResultTemplateSaveParam param) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>(user).run(getSalaryAcctExcelService(user)::exportTemplateList, param); + return new ResponseResult>(user).run(getSalaryAcctExcelService(user)::exportTemplateList, param); } From da4e908a7de8be3f65e98b5fd7fcc1197b0d8275 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 10 Oct 2024 14:16:57 +0800 Subject: [PATCH 100/124] =?UTF-8?q?=E6=A8=A1=E6=9D=BFsql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/DM/sql202410100103.sql | 8 ++++++++ resource/sqlupgrade/GS/sql202410100103.sql | 8 ++++++++ resource/sqlupgrade/JC/sql202410100103.sql | 8 ++++++++ resource/sqlupgrade/Mysql/sql202410100103.sql | 3 +++ resource/sqlupgrade/Oracle/sql202410100103.sql | 7 +++++++ resource/sqlupgrade/PG/sql202410100103.sql | 3 +++ resource/sqlupgrade/SQLServer/sql202410100103.sql | 5 +++++ resource/sqlupgrade/ST/sql202410100103.sql | 8 ++++++++ 8 files changed, 50 insertions(+) create mode 100644 resource/sqlupgrade/DM/sql202410100103.sql create mode 100644 resource/sqlupgrade/GS/sql202410100103.sql create mode 100644 resource/sqlupgrade/JC/sql202410100103.sql create mode 100644 resource/sqlupgrade/Mysql/sql202410100103.sql create mode 100644 resource/sqlupgrade/Oracle/sql202410100103.sql create mode 100644 resource/sqlupgrade/PG/sql202410100103.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202410100103.sql create mode 100644 resource/sqlupgrade/ST/sql202410100103.sql diff --git a/resource/sqlupgrade/DM/sql202410100103.sql b/resource/sqlupgrade/DM/sql202410100103.sql new file mode 100644 index 000000000..4d36ef44a --- /dev/null +++ b/resource/sqlupgrade/DM/sql202410100103.sql @@ -0,0 +1,8 @@ +ALTER TABLE hrsa_acct_result_template ADD ( + type number NULL +); +/ + +update hrsa_acct_result_template set type = 0; +/ + diff --git a/resource/sqlupgrade/GS/sql202410100103.sql b/resource/sqlupgrade/GS/sql202410100103.sql new file mode 100644 index 000000000..4d36ef44a --- /dev/null +++ b/resource/sqlupgrade/GS/sql202410100103.sql @@ -0,0 +1,8 @@ +ALTER TABLE hrsa_acct_result_template ADD ( + type number NULL +); +/ + +update hrsa_acct_result_template set type = 0; +/ + diff --git a/resource/sqlupgrade/JC/sql202410100103.sql b/resource/sqlupgrade/JC/sql202410100103.sql new file mode 100644 index 000000000..4d36ef44a --- /dev/null +++ b/resource/sqlupgrade/JC/sql202410100103.sql @@ -0,0 +1,8 @@ +ALTER TABLE hrsa_acct_result_template ADD ( + type number NULL +); +/ + +update hrsa_acct_result_template set type = 0; +/ + diff --git a/resource/sqlupgrade/Mysql/sql202410100103.sql b/resource/sqlupgrade/Mysql/sql202410100103.sql new file mode 100644 index 000000000..5b645e3f6 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202410100103.sql @@ -0,0 +1,3 @@ +ALTER TABLE hrsa_acct_result_template ADD COLUMN type int(0) NULL ; + +update hrsa_acct_result_template set type = 0; diff --git a/resource/sqlupgrade/Oracle/sql202410100103.sql b/resource/sqlupgrade/Oracle/sql202410100103.sql new file mode 100644 index 000000000..90d5981fd --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202410100103.sql @@ -0,0 +1,7 @@ +ALTER TABLE hrsa_acct_result_template ADD ( + type number NULL +) +/ + +update hrsa_acct_result_template set type = 0 +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202410100103.sql b/resource/sqlupgrade/PG/sql202410100103.sql new file mode 100644 index 000000000..2deb5e3a5 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202410100103.sql @@ -0,0 +1,3 @@ +alter table hrsa_acct_result_template add type int null ; + +update hrsa_acct_result_template set type = 0; \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202410100103.sql b/resource/sqlupgrade/SQLServer/sql202410100103.sql new file mode 100644 index 000000000..f2820af3a --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202410100103.sql @@ -0,0 +1,5 @@ +ALTER TABLE hrsa_acct_result_template ADD type int NULL +GO + +update hrsa_acct_result_template set type = 0 +GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql202410100103.sql b/resource/sqlupgrade/ST/sql202410100103.sql new file mode 100644 index 000000000..4d36ef44a --- /dev/null +++ b/resource/sqlupgrade/ST/sql202410100103.sql @@ -0,0 +1,8 @@ +ALTER TABLE hrsa_acct_result_template ADD ( + type number NULL +); +/ + +update hrsa_acct_result_template set type = 0; +/ + From 310c77a2705b1d27bef549da510a18e319b13483 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 11 Oct 2024 15:14:21 +0800 Subject: [PATCH 101/124] =?UTF-8?q?excel=E8=AE=BE=E7=BD=AE=E5=88=97?= =?UTF-8?q?=E5=AE=BD=20=E8=B6=85=E8=BF=87255=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/util/excel/ExcelUtilPlus.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/com/engine/salary/util/excel/ExcelUtilPlus.java b/src/com/engine/salary/util/excel/ExcelUtilPlus.java index f301e8c23..9da402ce7 100644 --- a/src/com/engine/salary/util/excel/ExcelUtilPlus.java +++ b/src/com/engine/salary/util/excel/ExcelUtilPlus.java @@ -134,7 +134,7 @@ public class ExcelUtilPlus { rowZeroCell.setCellValue(columnGroupItem.getText().toString()); rowZeroCell.setCellStyle(titleCellStyle); //设置列宽 - sheet.setColumnWidth(i, Math.max(12, columnGroupItem.getText().length() * 4) * 256); + sheet.setColumnWidth(i, Math.min(255, Math.max(12, columnGroupItem.getText().length() * 4)) * 256); patternList.add(columnGroupItem.getPattern()); } @@ -262,7 +262,7 @@ public class ExcelUtilPlus { //遍历设置列宽 List header = rowList.get(0); for (int i = 0; i < header.size(); i++) { - sheet.setColumnWidth(i, Math.max(12, header.get(i).toString().length() * 4) * 256); + sheet.setColumnWidth(i, Math.min(255, Math.max(12, header.get(i).toString().length() * 4)) * 256); } for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) { @@ -349,7 +349,7 @@ public class ExcelUtilPlus { //遍历设置列宽 List header = rowList.get(0); for (int i = 0; i < header.size(); i++) { - sheet.setColumnWidth(i, Math.max(12, header.get(i).toString().length() * 4) * 256); + sheet.setColumnWidth(i, Math.min(255, Math.max(12, header.get(i).toString().length() * 4)) * 256); } for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) { @@ -454,7 +454,7 @@ public class ExcelUtilPlus { //遍历设置列宽 List header = rowList.get(0); for (int i = 0; i < header.size(); i++) { - sheet.setColumnWidth(i, Math.max(12, header.get(i).toString().length() * 4) * 256); + sheet.setColumnWidth(i, Math.min(255, Math.max(12, header.get(i).toString().length() * 4)) * 256); } for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) { @@ -588,7 +588,7 @@ public class ExcelUtilPlus { rowOneCell.setCellValue(columnGroupItem.getText().toString()); rowOneCell.setCellStyle(titleCellStyle); //设置列宽 - sheet.setColumnWidth(startIndex, Math.max(12, columnGroupItem.getText().length() * 4) * 256); + sheet.setColumnWidth(startIndex, Math.min(255, Math.max(12, columnGroupItem.getText().length() * 4)) * 256); startIndex++; patternList.add(columnGroupItem.getPattern()); } else { @@ -610,7 +610,7 @@ public class ExcelUtilPlus { subHeader.setCellValue(childrenItem.getText().toString()); subHeader.setCellStyle(titleCellStyle); //设置列宽 - sheet.setColumnWidth(startIndex + j, Math.max(12, childrenItem.getText().length() * 4) * 256); + sheet.setColumnWidth(startIndex + j, Math.min(255, Math.max(12, childrenItem.getText().length() * 4)) * 256); patternList.add(childrenItem.getPattern()); } @@ -789,7 +789,7 @@ public class ExcelUtilPlus { rowOneCell.setCellValue(columnGroupItem.getText().toString()); rowOneCell.setCellStyle(titleCellStyle); //设置列宽 - sheet.setColumnWidth(startIndex, Math.max(12, columnGroupItem.getText().length() * 4) * 256); + sheet.setColumnWidth(startIndex, Math.min(255, Math.max(12, columnGroupItem.getText().length() * 4)) * 256); startIndex++; } else { List childrenList = columnGroupItem.getChildren(); @@ -810,7 +810,7 @@ public class ExcelUtilPlus { subHeader.setCellValue(childrenItem.getText().toString()); subHeader.setCellStyle(titleCellStyle); //设置列宽 - sheet.setColumnWidth(startIndex + j, Math.max(12, childrenItem.getText().length() * 4) * 256); + sheet.setColumnWidth(startIndex + j, Math.min(255, Math.max(12, childrenItem.getText().length() * 4)) * 256); } startIndex += childrenList.size(); From 64ac30c05f683cfdee92e36c71d907b3d0c4de64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 11 Oct 2024 15:34:17 +0800 Subject: [PATCH 102/124] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E5=88=97?= =?UTF-8?q?=E5=85=A8=E5=B1=80=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/DM/sql202410110103.sql | 13 ++ resource/sqlupgrade/GS/sql202410110103.sql | 13 ++ resource/sqlupgrade/JC/sql202410110103.sql | 13 ++ resource/sqlupgrade/Mysql/sql202410110103.sql | 12 + .../sqlupgrade/Oracle/sql202410110103.sql | 12 + resource/sqlupgrade/PG/sql202410110103.sql | 11 + .../sqlupgrade/SQLServer/sql202410110103.sql | 12 + resource/sqlupgrade/ST/sql202410110103.sql | 13 ++ .../constant/SalaryDefaultTenantConstant.java | 13 +- .../setting/dto/PageListSettingDTO.java | 20 ++ .../param/PageListSettingSaveParam.java | 31 +++ .../entity/setting/po/PageListSettingPO.java | 72 ++++++ .../mapper/setting/PageListSettingMapper.java | 73 ++++++ .../mapper/setting/PageListSettingMapper.xml | 209 ++++++++++++++++++ .../SalaryStatisticsEmployeeServiceImpl.java | 55 ++--- .../SalaryStatisticsEmployeeController.java | 2 +- .../SalaryStatisticsEmployeeWrapper.java | 3 + .../engine/salary/service/SettingService.java | 11 + .../service/impl/SettingServiceImpl.java | 102 +++++++++ .../salary/web/SalaryCommonController.java | 28 ++- .../salary/wrapper/SalaryCommonWrapper.java | 18 ++ 21 files changed, 699 insertions(+), 37 deletions(-) create mode 100644 resource/sqlupgrade/DM/sql202410110103.sql create mode 100644 resource/sqlupgrade/GS/sql202410110103.sql create mode 100644 resource/sqlupgrade/JC/sql202410110103.sql create mode 100644 resource/sqlupgrade/Mysql/sql202410110103.sql create mode 100644 resource/sqlupgrade/Oracle/sql202410110103.sql create mode 100644 resource/sqlupgrade/PG/sql202410110103.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202410110103.sql create mode 100644 resource/sqlupgrade/ST/sql202410110103.sql create mode 100644 src/com/engine/salary/entity/setting/dto/PageListSettingDTO.java create mode 100644 src/com/engine/salary/entity/setting/param/PageListSettingSaveParam.java create mode 100644 src/com/engine/salary/entity/setting/po/PageListSettingPO.java create mode 100644 src/com/engine/salary/mapper/setting/PageListSettingMapper.java create mode 100644 src/com/engine/salary/mapper/setting/PageListSettingMapper.xml create mode 100644 src/com/engine/salary/service/SettingService.java create mode 100644 src/com/engine/salary/service/impl/SettingServiceImpl.java diff --git a/resource/sqlupgrade/DM/sql202410110103.sql b/resource/sqlupgrade/DM/sql202410110103.sql new file mode 100644 index 000000000..80fd04daf --- /dev/null +++ b/resource/sqlupgrade/DM/sql202410110103.sql @@ -0,0 +1,13 @@ +create table hrsa_page_list_setting +( + id number primary key , + setting clob , + page varchar2(200), + creator number, + create_time date , + update_time date, + delete_type int , + tenant_key varchar2(10) +); +/ + diff --git a/resource/sqlupgrade/GS/sql202410110103.sql b/resource/sqlupgrade/GS/sql202410110103.sql new file mode 100644 index 000000000..80fd04daf --- /dev/null +++ b/resource/sqlupgrade/GS/sql202410110103.sql @@ -0,0 +1,13 @@ +create table hrsa_page_list_setting +( + id number primary key , + setting clob , + page varchar2(200), + creator number, + create_time date , + update_time date, + delete_type int , + tenant_key varchar2(10) +); +/ + diff --git a/resource/sqlupgrade/JC/sql202410110103.sql b/resource/sqlupgrade/JC/sql202410110103.sql new file mode 100644 index 000000000..80fd04daf --- /dev/null +++ b/resource/sqlupgrade/JC/sql202410110103.sql @@ -0,0 +1,13 @@ +create table hrsa_page_list_setting +( + id number primary key , + setting clob , + page varchar2(200), + creator number, + create_time date , + update_time date, + delete_type int , + tenant_key varchar2(10) +); +/ + diff --git a/resource/sqlupgrade/Mysql/sql202410110103.sql b/resource/sqlupgrade/Mysql/sql202410110103.sql new file mode 100644 index 000000000..04ed725c6 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202410110103.sql @@ -0,0 +1,12 @@ +CREATE TABLE hrsa_page_list_setting +( + id bigint(0) NOT NULL , + setting text , + page varchar(200), + creator bigint(0), + create_time datetime(0) , + update_time datetime(0), + delete_type int(0) , + tenant_key varchar(10) , + PRIMARY KEY (id) +); \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202410110103.sql b/resource/sqlupgrade/Oracle/sql202410110103.sql new file mode 100644 index 000000000..554fd4221 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202410110103.sql @@ -0,0 +1,12 @@ +create table hrsa_page_list_setting +( + id number primary key , + setting clob , + page varchar2(200), + creator number, + create_time date , + update_time date, + delete_type int , + tenant_key varchar2(10) +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202410110103.sql b/resource/sqlupgrade/PG/sql202410110103.sql new file mode 100644 index 000000000..813426c47 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202410110103.sql @@ -0,0 +1,11 @@ +create table hrsa_page_list_setting +( + id bigint primary key , + setting text , + page varchar(200), + creator bigint, + create_time timestamp , + update_time timestamp, + delete_type int , + tenant_key varchar(10) +); \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202410110103.sql b/resource/sqlupgrade/SQLServer/sql202410110103.sql new file mode 100644 index 000000000..8a2dae190 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202410110103.sql @@ -0,0 +1,12 @@ +create table hrsa_page_list_setting +( + id bigint primary key , + setting ntext , + page varchar(200), + creator bigint, + create_time datetime , + update_time datetime, + delete_type int , + tenant_key varchar(10) +) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql202410110103.sql b/resource/sqlupgrade/ST/sql202410110103.sql new file mode 100644 index 000000000..80fd04daf --- /dev/null +++ b/resource/sqlupgrade/ST/sql202410110103.sql @@ -0,0 +1,13 @@ +create table hrsa_page_list_setting +( + id number primary key , + setting clob , + page varchar2(200), + creator number, + create_time date , + update_time date, + delete_type int , + tenant_key varchar2(10) +); +/ + diff --git a/src/com/engine/salary/constant/SalaryDefaultTenantConstant.java b/src/com/engine/salary/constant/SalaryDefaultTenantConstant.java index 184ccee40..4e60d65e0 100644 --- a/src/com/engine/salary/constant/SalaryDefaultTenantConstant.java +++ b/src/com/engine/salary/constant/SalaryDefaultTenantConstant.java @@ -1,12 +1,13 @@ package com.engine.salary.constant; /** - * @description: 默认的租户key - * @author: xiajun - * @modified By: xiajun - * @date: Created in 2/8/22 11:25 AM - * @version:v1.0 - */ + * 默认租户 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public class SalaryDefaultTenantConstant { public static final String DEFAULT_TENANT_KEY = "all_teams"; diff --git a/src/com/engine/salary/entity/setting/dto/PageListSettingDTO.java b/src/com/engine/salary/entity/setting/dto/PageListSettingDTO.java new file mode 100644 index 000000000..afe2de81c --- /dev/null +++ b/src/com/engine/salary/entity/setting/dto/PageListSettingDTO.java @@ -0,0 +1,20 @@ +package com.engine.salary.entity.setting.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 薪资帐套表 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PageListSettingDTO { + + private String name; + + private String value; +} \ No newline at end of file diff --git a/src/com/engine/salary/entity/setting/param/PageListSettingSaveParam.java b/src/com/engine/salary/entity/setting/param/PageListSettingSaveParam.java new file mode 100644 index 000000000..bd97950e7 --- /dev/null +++ b/src/com/engine/salary/entity/setting/param/PageListSettingSaveParam.java @@ -0,0 +1,31 @@ +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 PageListSettingSaveParam { + + /** + * 页面,0:薪资明细 + */ + @DataCheck(require = true,message = "请选择页面") + private String page; + + /** + * 设置 + */ + @DataCheck(require = true,message = "请选择设置") + private List setting; +} \ No newline at end of file diff --git a/src/com/engine/salary/entity/setting/po/PageListSettingPO.java b/src/com/engine/salary/entity/setting/po/PageListSettingPO.java new file mode 100644 index 000000000..59b7f2ea1 --- /dev/null +++ b/src/com/engine/salary/entity/setting/po/PageListSettingPO.java @@ -0,0 +1,72 @@ +package com.engine.salary.entity.setting.po; + +import com.engine.hrmelog.annotation.ElogTransform; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Collection; +import java.util.Date; + +/** + * 薪资帐套表 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PageListSettingPO { + + + @ElogTransform(name = "") + private Long id; + + /** + * 页面,0:薪资明细 + */ + @ElogTransform(name = "页面,0:薪资明细") + private String page; + + /** + * 设置 + */ + @ElogTransform(name = "设置") + private String setting; + + + /** + * 更新时间 + */ + @ElogTransform(name = "更新时间") + private Date updateTime; + + /** + * 创建时间 + */ + @ElogTransform(name = "创建时间") + private Date createTime; + + /** + * 创建人 + */ + @ElogTransform(name = "创建人") + private Long creator; + + /** + * 是否已删除。0:未删除、1:已删除 + */ + @ElogTransform(name = "是否已删除。0:未删除、1:已删除") + private Integer deleteType; + + /** + * 租户ID + */ + @ElogTransform(name = "租户ID") + private String tenantKey; + + + //主键id集合 + private Collection ids; + +} \ No newline at end of file diff --git a/src/com/engine/salary/mapper/setting/PageListSettingMapper.java b/src/com/engine/salary/mapper/setting/PageListSettingMapper.java new file mode 100644 index 000000000..9c2ce51f8 --- /dev/null +++ b/src/com/engine/salary/mapper/setting/PageListSettingMapper.java @@ -0,0 +1,73 @@ +package com.engine.salary.mapper.setting; + +import com.engine.salary.entity.setting.po.PageListSettingPO; +import org.apache.ibatis.annotations.Param; + +import java.util.Collection; +import java.util.List; + +public interface PageListSettingMapper { + + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + /** + * 条件查询 + * + * @return 返回集合,没有返回空List + */ + List listSome(PageListSettingPO pageListSetting); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + PageListSettingPO getById(Long id); + + /** + * 新增,忽略null字段 + * + * @param pageListSetting 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(PageListSettingPO pageListSetting); + + /** + * 修改,修改所有字段 + * + * @param pageListSetting 修改的记录 + * @return 返回影响行数 + */ + int update(PageListSettingPO pageListSetting); + + /** + * 修改,忽略null字段 + * + * @param pageListSetting 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(PageListSettingPO pageListSetting); + + /** + * 删除记录 + * + * @param pageListSetting 待删除的记录 + * @return 返回影响行数 + */ + int delete(PageListSettingPO pageListSetting); + + /** + * 批量删除记录 + * @param ids 主键id集合 + */ + void deleteByIds(@Param("ids") Collection ids); + + PageListSettingPO getByPage(String page); +} \ No newline at end of file diff --git a/src/com/engine/salary/mapper/setting/PageListSettingMapper.xml b/src/com/engine/salary/mapper/setting/PageListSettingMapper.xml new file mode 100644 index 000000000..df06cf162 --- /dev/null +++ b/src/com/engine/salary/mapper/setting/PageListSettingMapper.xml @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + t + . + create_time + , t.creator + , t.delete_type + , t.id + , t.page + , t.setting + , t.tenant_key + , t.update_time + + + + + + + + + + + + + + + INSERT INTO hrsa_page_list_setting + + + + create_time, + + + creator, + + + delete_type, + + + page, + + + setting, + + + tenant_key, + + + update_time, + + + + + #{createTime}, + + + #{creator}, + + + #{deleteType}, + + + #{page}, + + + #{setting}, + + + #{tenantKey}, + + + #{updateTime}, + + + + + + + + UPDATE hrsa_page_list_setting + + create_time=#{createTime}, + creator=#{creator}, + delete_type=#{deleteType}, + page=#{page}, + setting=#{setting}, + tenant_key=#{tenantKey}, + update_time=#{updateTime}, + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_page_list_setting + + + create_time=#{createTime}, + + + creator=#{creator}, + + + delete_type=#{deleteType}, + + + page=#{page}, + + + setting=#{setting}, + + + tenant_key=#{tenantKey}, + + + update_time=#{updateTime}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_page_list_setting + SET delete_type=1 + WHERE id = #{id} + AND delete_type = 0 + + + + UPDATE hrsa_page_list_setting + SET delete_type = 1 + WHERE delete_type = 0 + AND id IN + + #{id} + + + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java index 5728f0886..635134b5f 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java @@ -25,10 +25,7 @@ import com.engine.salary.report.entity.param.SalaryStatisticsEmployeeSalaryQuery import com.engine.salary.report.service.SalaryStatisticsEmployeeService; import com.engine.salary.service.*; import com.engine.salary.service.impl.*; -import com.engine.salary.util.SalaryAssert; -import com.engine.salary.util.SalaryDateUtil; -import com.engine.salary.util.SalaryEntityUtil; -import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.*; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; @@ -89,6 +86,10 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } + private SettingService getSettingService(User user) { + return ServiceUtil.getService(SettingServiceImpl.class, user); + } + @Override public PageInfo listPage(SalaryStatisticsEmployeeQueryParam queryParam) { List list = Collections.emptyList(); @@ -270,7 +271,7 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala map.put("id", se.getId().toString()); map.put("salaryMonth", SalaryDateUtil.getFormatYearMonth(se.getSalaryMonth())); map.put("taxAgent", taxAgentMap.get(se.getTaxAgentId())); - map.put("salarySob",SalarySobMap.get(se.getSalarySobId())); + map.put("salarySob", SalarySobMap.get(se.getSalarySobId())); map.put("acctTimes", salaryAcctRecordMap.get(se.getSalaryAcctRecordId())); map.put("userName", Util.null2String(emp.getUsername())); map.put("subCompany", Util.null2String(emp.getSubcompanyName())); @@ -302,10 +303,10 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala // 2.年月参数处理,注意:薪资所属月居然是用字符串存储的,无法通过sql between处理 List dataParam = new ArrayList<>(); if (StringUtils.isNotBlank(queryParam.getStartDateStr())) { - dataParam.add(SalaryDateUtil.dateStrToLocalTime(queryParam.getStartDateStr()+ "-01 00:00:00")); + dataParam.add(SalaryDateUtil.dateStrToLocalTime(queryParam.getStartDateStr() + "-01 00:00:00")); } if (StringUtils.isNotBlank(queryParam.getEndDateStr())) { - dataParam.add(SalaryDateUtil.dateStrToLocalTime(queryParam.getEndDateStr()+ "-01 00:00:00")); + dataParam.add(SalaryDateUtil.dateStrToLocalTime(queryParam.getEndDateStr() + "-01 00:00:00")); } Set salaryMonths = SalaryStatisticsEmployeeBO.getSalaryMonths(null, dataParam) .stream() @@ -319,13 +320,13 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala // 根据分部、部门筛选 List employeeList = getSalaryEmployeeService(user).listBySubCompanyOrDepartment(queryParam.getSubCompanyIds(), queryParam.getDepartmentIds()); // 根据关键词过滤 - if(StringUtils.isNotBlank(queryParam.getKeyword())) { + if (StringUtils.isNotBlank(queryParam.getKeyword())) { employeeList = employeeList.stream() .filter(e -> (e.getUsername().contains(queryParam.getKeyword()) || (StringUtils.isNotEmpty(e.getWorkcode()) && e.getWorkcode().contains(queryParam.getKeyword())))) .collect(Collectors.toList()); } List employeeIds = employeeList.stream().map(DataCollectionEmployee::getEmployeeId).collect(Collectors.toList()); - salaryAcctEmployeeList = salaryAcctEmployeeList.stream().filter( acctEmp -> employeeIds.contains(acctEmp.getEmployeeId())).collect(Collectors.toList()); + salaryAcctEmployeeList = salaryAcctEmployeeList.stream().filter(acctEmp -> employeeIds.contains(acctEmp.getEmployeeId())).collect(Collectors.toList()); } if (CollectionUtils.isEmpty(salaryAcctEmployeeList)) { return new PageInfo<>(); @@ -358,23 +359,25 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala List salaryAcctResultValues = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); // 3.获取薪资项目 - List salaryItemList = getSalaryItemService(user).listAll(); - salaryItemList = salaryItemList.stream() - .sorted(new Comparator() { - @Override - public int compare(SalaryItemPO o1, SalaryItemPO o2) { - if (o1.getSortedIndex() == null && o2.getSortedIndex() == null) { - Integer systemType1 = o1.getSystemType() == null ? 0 : o1.getSystemType(); - Integer systemType2 = o2.getSystemType() == null ? 0 : o2.getSystemType(); - return systemType1.compareTo(systemType2); - } else { - Integer sortedIndex1 = o1.getSortedIndex() == null ? 0 : o1.getSortedIndex(); - Integer sortedIndex2 = o2.getSortedIndex() == null ? 0 : o2.getSortedIndex(); - return sortedIndex2.compareTo(sortedIndex1); - } - } - }) - .collect(Collectors.toList()); + Map setting = getSettingService(user).getPageListSetting("salary_details_report"); + List checked = setting.get("checked") != null ? JsonUtil.parseList(setting.get("checked"), Long.class) : new ArrayList<>(); + List salaryItemList = getSalaryItemService(user).listByIds(checked); +// salaryItemList = salaryItemList.stream() +// .sorted(new Comparator() { +// @Override +// public int compare(SalaryItemPO o1, SalaryItemPO o2) { +// if (o1.getSortedIndex() == null && o2.getSortedIndex() == null) { +// Integer systemType1 = o1.getSystemType() == null ? 0 : o1.getSystemType(); +// Integer systemType2 = o2.getSystemType() == null ? 0 : o2.getSystemType(); +// return systemType1.compareTo(systemType2); +// } else { +// Integer sortedIndex1 = o1.getSortedIndex() == null ? 0 : o1.getSortedIndex(); +// Integer sortedIndex2 = o2.getSortedIndex() == null ? 0 : o2.getSortedIndex(); +// return sortedIndex2.compareTo(sortedIndex1); +// } +// } +// }) +// .collect(Collectors.toList()); return SalaryStatisticsEmployeeDetailResultDTO.builder() .salaryAcctEmployeeList(salaryAcctEmployeeList) diff --git a/src/com/engine/salary/report/web/SalaryStatisticsEmployeeController.java b/src/com/engine/salary/report/web/SalaryStatisticsEmployeeController.java index b4e668513..4fa4ae64a 100644 --- a/src/com/engine/salary/report/web/SalaryStatisticsEmployeeController.java +++ b/src/com/engine/salary/report/web/SalaryStatisticsEmployeeController.java @@ -73,7 +73,7 @@ public class SalaryStatisticsEmployeeController { } /** - * 员工薪资列表 + * 薪资明细 * * @param queryParam * @return diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java index 646600f08..63e0863cf 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java @@ -229,6 +229,9 @@ public class SalaryStatisticsEmployeeWrapper extends Service { // 获取发薪人员 PageInfo salaryAcctEmployeePageInfo = getSalaryStatisticsEmployeeService(user).listSalaryAcctEmp(queryParam); List employeePOS = salaryAcctEmployeePageInfo.getList(); + if (CollectionUtils.isEmpty(employeePOS)){ + return resultMap; + } Map sumResultMap = Maps.newHashMap(); diff --git a/src/com/engine/salary/service/SettingService.java b/src/com/engine/salary/service/SettingService.java new file mode 100644 index 000000000..7b4f1d9bc --- /dev/null +++ b/src/com/engine/salary/service/SettingService.java @@ -0,0 +1,11 @@ +package com.engine.salary.service; + +import com.engine.salary.entity.setting.param.PageListSettingSaveParam; + +import java.util.Map; + +public interface SettingService { + void savePageListSetting(PageListSettingSaveParam pageListSettingSaveParam); + + Map getPageListSetting(String page); +} diff --git a/src/com/engine/salary/service/impl/SettingServiceImpl.java b/src/com/engine/salary/service/impl/SettingServiceImpl.java new file mode 100644 index 000000000..66b13c126 --- /dev/null +++ b/src/com/engine/salary/service/impl/SettingServiceImpl.java @@ -0,0 +1,102 @@ +package com.engine.salary.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.entity.setting.param.PageListSettingSaveParam; +import com.engine.salary.entity.setting.po.PageListSettingPO; +import com.engine.salary.mapper.setting.PageListSettingMapper; +import com.engine.salary.service.SalaryItemService; +import com.engine.salary.service.SalarySobService; +import com.engine.salary.service.SettingService; +import com.engine.salary.util.JsonUtil; +import com.engine.salary.util.db.IdGenerator; +import com.engine.salary.util.db.MapperProxyFactory; +import weaver.hrm.User; + +import java.util.*; +import java.util.stream.Collectors; + +import static com.engine.salary.constant.SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY; + +/** + * 薪资核算 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public class SettingServiceImpl extends Service implements SettingService { + + private PageListSettingMapper getPageListSettingMapper() { + return MapperProxyFactory.getProxy(PageListSettingMapper.class); + } + + private SalarySobService getSalarySobService(User user) { + return ServiceUtil.getService(SalarySobServiceImpl.class, user); + } + + private SalaryItemService getSalaryItemService(User user) { + return ServiceUtil.getService(SalaryItemServiceImpl.class, user); + } + + @Override + public void savePageListSetting(PageListSettingSaveParam pageListSettingSaveParam) { + Date now = new Date(); + + PageListSettingPO pageListSettingPO = getPageListSettingMapper().getByPage(pageListSettingSaveParam.getPage()); + if (pageListSettingPO != null) { + pageListSettingPO.setSetting(JsonUtil.toJsonString(pageListSettingSaveParam.getSetting())); + pageListSettingPO.setUpdateTime(now); + getPageListSettingMapper().updateIgnoreNull(pageListSettingPO); + } else { + pageListSettingPO = PageListSettingPO.builder() + .id(IdGenerator.generate()) + .page(pageListSettingSaveParam.getPage()) + .setting(JsonUtil.toJsonString(pageListSettingSaveParam.getSetting())) + .creator((long) user.getUID()) + .createTime(now) + .updateTime(now) + .deleteType(0) + .tenantKey(DEFAULT_TENANT_KEY) + .build(); + getPageListSettingMapper().insertIgnoreNull(pageListSettingPO); + } + } + + @Override + public Map getPageListSetting(String page) { + + Map result = new HashMap(); + PageListSettingPO pageListSettingPO = getPageListSettingMapper().getByPage(page); + if ("salary_details_report".equals(page)) { + List salaryItemList = getSalaryItemService(user).listAll(); + salaryItemList = salaryItemList.stream() + .sorted(new Comparator() { + @Override + public int compare(SalaryItemPO o1, SalaryItemPO o2) { + if (o1.getSortedIndex() == null && o2.getSortedIndex() == null) { + Integer systemType1 = o1.getSystemType() == null ? 0 : o1.getSystemType(); + Integer systemType2 = o2.getSystemType() == null ? 0 : o2.getSystemType(); + return systemType1.compareTo(systemType2); + } else { + Integer sortedIndex1 = o1.getSortedIndex() == null ? 0 : o1.getSortedIndex(); + Integer sortedIndex2 = o2.getSortedIndex() == null ? 0 : o2.getSortedIndex(); + return sortedIndex2.compareTo(sortedIndex1); + } + } + }) + .collect(Collectors.toList()); + result.put("setting", salaryItemList); + if (pageListSettingPO != null && StrUtil.isNotEmpty(pageListSettingPO.getSetting())) { + result.put("checked", JsonUtil.parseList(pageListSettingPO.getSetting(), Long.class)); + } else { + List collect = salaryItemList.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); + result.put("checked", collect); + } + } + return result; + } +} diff --git a/src/com/engine/salary/web/SalaryCommonController.java b/src/com/engine/salary/web/SalaryCommonController.java index 7f1637a5c..2f7e87d6e 100644 --- a/src/com/engine/salary/web/SalaryCommonController.java +++ b/src/com/engine/salary/web/SalaryCommonController.java @@ -1,19 +1,18 @@ package com.engine.salary.web; import com.engine.common.util.ServiceUtil; +import com.engine.salary.entity.setting.param.PageListSettingSaveParam; import com.engine.salary.util.ResponseResult; import com.engine.salary.util.SalaryEnumUtil; import com.engine.salary.wrapper.SalaryCommonWrapper; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import lombok.extern.slf4j.Slf4j; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; +import javax.ws.rs.*; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import java.util.List; @@ -52,4 +51,25 @@ public class SalaryCommonController { } + /** + * 页面模板设置 + * + * @param param + * @return + */ + @POST + @Path("/pageList/save/setting") + @Produces(MediaType.APPLICATION_JSON) + public String savePageListSetting(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody PageListSettingSaveParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryCommonWrapper(user)::savePageListSetting, param); + } + + @GET + @Path("/pageList/get/setting") + @Produces(MediaType.APPLICATION_JSON) + public String getPageListSetting(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "page") String page) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryCommonWrapper(user)::getPageListSetting, page); + } } diff --git a/src/com/engine/salary/wrapper/SalaryCommonWrapper.java b/src/com/engine/salary/wrapper/SalaryCommonWrapper.java index 982c1e5e9..cbeefbb42 100644 --- a/src/com/engine/salary/wrapper/SalaryCommonWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryCommonWrapper.java @@ -2,10 +2,15 @@ package com.engine.salary.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.entity.setting.param.PageListSettingSaveParam; import com.engine.salary.service.SalaryCacheService; +import com.engine.salary.service.SettingService; import com.engine.salary.service.impl.SalaryCacheServiceImpl; +import com.engine.salary.service.impl.SettingServiceImpl; import weaver.hrm.User; +import java.util.Map; + public class SalaryCommonWrapper extends Service { @@ -13,6 +18,10 @@ public class SalaryCommonWrapper extends Service { return ServiceUtil.getService(SalaryCacheServiceImpl.class, user); } + private SettingService getSettingService(User user) { + return ServiceUtil.getService(SettingServiceImpl.class, user); + } + public Object getCacheInfo(String key) { return getSalaryCacheService(user).get(key); } @@ -20,4 +29,13 @@ public class SalaryCommonWrapper extends Service { public void removeCache(String key) { getSalaryCacheService(user).remove(key); } + + public void savePageListSetting(PageListSettingSaveParam pageListSettingSaveParam) { + getSettingService(user).savePageListSetting(pageListSettingSaveParam); + } + + + public Map getPageListSetting(String page) { + return getSettingService(user).getPageListSetting(page); + } } From b6c7a7f2bd9a856bbe2ab697680e0d9e52825796 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 11 Oct 2024 17:04:13 +0800 Subject: [PATCH 103/124] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E5=88=97?= =?UTF-8?q?=E5=85=A8=E5=B1=80=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../param/PageListSettingQueryParam.java | 22 +++++++++++++ .../SalaryStatisticsEmployeeServiceImpl.java | 4 ++- .../engine/salary/service/SettingService.java | 3 +- .../service/impl/SettingServiceImpl.java | 33 +++++++++++-------- .../salary/web/SalaryCommonController.java | 7 ++-- .../salary/wrapper/SalaryCommonWrapper.java | 5 +-- 6 files changed, 53 insertions(+), 21 deletions(-) create mode 100644 src/com/engine/salary/entity/setting/param/PageListSettingQueryParam.java diff --git a/src/com/engine/salary/entity/setting/param/PageListSettingQueryParam.java b/src/com/engine/salary/entity/setting/param/PageListSettingQueryParam.java new file mode 100644 index 000000000..0de49c816 --- /dev/null +++ b/src/com/engine/salary/entity/setting/param/PageListSettingQueryParam.java @@ -0,0 +1,22 @@ +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; + +/** + * 薪资帐套表 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PageListSettingQueryParam { + + @DataCheck(require = true,message = "请选择页面") + private String page; + + private String name; +} \ No newline at end of file diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java index 635134b5f..dfab42262 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java @@ -10,6 +10,7 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.po.SalarySobPO; +import com.engine.salary.entity.setting.param.PageListSettingQueryParam; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.datacollection.UseEmployeeTypeEnum; @@ -359,7 +360,8 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala List salaryAcctResultValues = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); // 3.获取薪资项目 - Map setting = getSettingService(user).getPageListSetting("salary_details_report"); + PageListSettingQueryParam param = PageListSettingQueryParam.builder().page("salary_details_report").build(); + Map setting = getSettingService(user).getPageListSetting(param); List checked = setting.get("checked") != null ? JsonUtil.parseList(setting.get("checked"), Long.class) : new ArrayList<>(); List salaryItemList = getSalaryItemService(user).listByIds(checked); // salaryItemList = salaryItemList.stream() diff --git a/src/com/engine/salary/service/SettingService.java b/src/com/engine/salary/service/SettingService.java index 7b4f1d9bc..27b7e679e 100644 --- a/src/com/engine/salary/service/SettingService.java +++ b/src/com/engine/salary/service/SettingService.java @@ -1,5 +1,6 @@ package com.engine.salary.service; +import com.engine.salary.entity.setting.param.PageListSettingQueryParam; import com.engine.salary.entity.setting.param.PageListSettingSaveParam; import java.util.Map; @@ -7,5 +8,5 @@ import java.util.Map; public interface SettingService { void savePageListSetting(PageListSettingSaveParam pageListSettingSaveParam); - Map getPageListSetting(String page); + Map getPageListSetting(PageListSettingQueryParam param); } diff --git a/src/com/engine/salary/service/impl/SettingServiceImpl.java b/src/com/engine/salary/service/impl/SettingServiceImpl.java index 66b13c126..9f52b7ea8 100644 --- a/src/com/engine/salary/service/impl/SettingServiceImpl.java +++ b/src/com/engine/salary/service/impl/SettingServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.entity.setting.param.PageListSettingQueryParam; import com.engine.salary.entity.setting.param.PageListSettingSaveParam; import com.engine.salary.entity.setting.po.PageListSettingPO; import com.engine.salary.mapper.setting.PageListSettingMapper; @@ -67,25 +68,29 @@ public class SettingServiceImpl extends Service implements SettingService { } @Override - public Map getPageListSetting(String page) { - + public Map getPageListSetting(PageListSettingQueryParam param) { + String page = param.getPage(); Map result = new HashMap(); PageListSettingPO pageListSettingPO = getPageListSettingMapper().getByPage(page); if ("salary_details_report".equals(page)) { List salaryItemList = getSalaryItemService(user).listAll(); salaryItemList = salaryItemList.stream() - .sorted(new Comparator() { - @Override - public int compare(SalaryItemPO o1, SalaryItemPO o2) { - if (o1.getSortedIndex() == null && o2.getSortedIndex() == null) { - Integer systemType1 = o1.getSystemType() == null ? 0 : o1.getSystemType(); - Integer systemType2 = o2.getSystemType() == null ? 0 : o2.getSystemType(); - return systemType1.compareTo(systemType2); - } else { - Integer sortedIndex1 = o1.getSortedIndex() == null ? 0 : o1.getSortedIndex(); - Integer sortedIndex2 = o2.getSortedIndex() == null ? 0 : o2.getSortedIndex(); - return sortedIndex2.compareTo(sortedIndex1); - } + .filter(po -> { + String name = param.getName(); + if (StrUtil.isNotEmpty(name)) { + return po.getName() != null && po.getName().contains(name); + } + return true; + }) + .sorted((o1, o2) -> { + if (o1.getSortedIndex() == null && o2.getSortedIndex() == null) { + Integer systemType1 = o1.getSystemType() == null ? 0 : o1.getSystemType(); + Integer systemType2 = o2.getSystemType() == null ? 0 : o2.getSystemType(); + return systemType1.compareTo(systemType2); + } else { + Integer sortedIndex1 = o1.getSortedIndex() == null ? 0 : o1.getSortedIndex(); + Integer sortedIndex2 = o2.getSortedIndex() == null ? 0 : o2.getSortedIndex(); + return sortedIndex2.compareTo(sortedIndex1); } }) .collect(Collectors.toList()); diff --git a/src/com/engine/salary/web/SalaryCommonController.java b/src/com/engine/salary/web/SalaryCommonController.java index 2f7e87d6e..d28dc0d86 100644 --- a/src/com/engine/salary/web/SalaryCommonController.java +++ b/src/com/engine/salary/web/SalaryCommonController.java @@ -1,6 +1,7 @@ package com.engine.salary.web; import com.engine.common.util.ServiceUtil; +import com.engine.salary.entity.setting.param.PageListSettingQueryParam; import com.engine.salary.entity.setting.param.PageListSettingSaveParam; import com.engine.salary.util.ResponseResult; import com.engine.salary.util.SalaryEnumUtil; @@ -65,11 +66,11 @@ public class SalaryCommonController { return new ResponseResult(user).run(getSalaryCommonWrapper(user)::savePageListSetting, param); } - @GET + @POST @Path("/pageList/get/setting") @Produces(MediaType.APPLICATION_JSON) - public String getPageListSetting(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "page") String page) { + public String getPageListSetting(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody PageListSettingQueryParam param) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getSalaryCommonWrapper(user)::getPageListSetting, page); + return new ResponseResult(user).run(getSalaryCommonWrapper(user)::getPageListSetting, param); } } diff --git a/src/com/engine/salary/wrapper/SalaryCommonWrapper.java b/src/com/engine/salary/wrapper/SalaryCommonWrapper.java index cbeefbb42..e66e09121 100644 --- a/src/com/engine/salary/wrapper/SalaryCommonWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryCommonWrapper.java @@ -2,6 +2,7 @@ package com.engine.salary.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.entity.setting.param.PageListSettingQueryParam; import com.engine.salary.entity.setting.param.PageListSettingSaveParam; import com.engine.salary.service.SalaryCacheService; import com.engine.salary.service.SettingService; @@ -35,7 +36,7 @@ public class SalaryCommonWrapper extends Service { } - public Map getPageListSetting(String page) { - return getSettingService(user).getPageListSetting(page); + public Map getPageListSetting(PageListSettingQueryParam param) { + return getSettingService(user).getPageListSetting(param); } } From 4c4b6ab57d9ea0db10c2462b0e82cd2b5690b31f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 11 Oct 2024 17:14:14 +0800 Subject: [PATCH 104/124] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E6=8C=81=E4=B9=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SalaryAcctExcelServiceImpl.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index aef1bb7c3..138f173c9 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -1,6 +1,7 @@ package com.engine.salary.service.impl; import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.StrUtil; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.cloudstore.dev.api.util.Util_DataCache; import com.engine.common.util.ServiceUtil; @@ -459,7 +460,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.getId(),salaryAcctRecordPO.getSalarySobId(), isBackCalc); + SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateWithItemHideBySalarySobId(salaryAcctRecordPO.getId(), salaryAcctRecordPO.getSalarySobId(), isBackCalc); // 构建薪资核算结果列表表头 List columnList = SalaryAcctResultBO.buildTableColumns(salarySobItemAggregateDTO, ListUtils.emptyIfNull(salaryAcctRecordPO.getLockSalaryItemIds())); // 获取固定列头数 @@ -595,7 +596,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc List salaryAcctResultTemplatePOS = getSalaryAcctResultTemplateService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId(), Arrays.asList(2)); if (CollectionUtils.isNotEmpty(salaryAcctResultTemplatePOS)) { String items = salaryAcctResultTemplatePOS.get(0).getSalaryItemIds(); - checkItems = Arrays.stream(items.split(",")).map(Long::valueOf).collect(Collectors.toList()); + checkItems = StrUtil.isNotEmpty(items) ? Arrays.stream(items.split(",")).map(Long::valueOf).collect(Collectors.toList()) : new ArrayList<>(); } return SalaryAcctImportFieldDTO.builder().itemsByGroup(itemsByGroup).checkItems(checkItems).build(); } @@ -891,7 +892,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // headerList.add("手机号"); // headerList.add("工号"); // 查询薪资账套下的薪资项目 - SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateByRecordId(exportParam.getSalaryAcctRecordId(),true); + SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateByRecordId(exportParam.getSalaryAcctRecordId(), true); // // 员工信息 // for (SalarySobEmpFieldDTO item : salarySobItemAggregateDTO.getEmpFields()) { @@ -1169,7 +1170,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc //salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102838, "姓名不能为空"), i, i, j, j); } else { //筛选导入人员信息可以在人力资源池中匹配到的人员信息 - List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue, salaryEmployees, dataValue, deparmentName, mobile, workcode,idNo, null); + List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue, salaryEmployees, dataValue, deparmentName, mobile, workcode, idNo, null); if (CollectionUtils.isEmpty(employeeSameIds)) { isError = true; From 3a224170f15caeefa130bb1dc128b3662e50947c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 11 Oct 2024 17:17:07 +0800 Subject: [PATCH 105/124] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E6=8C=81=E4=B9=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SalaryAcctExcelServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 138f173c9..75b63245c 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -680,7 +680,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc List salaryAcctResultTemplatePOS = getSalaryAcctResultTemplateService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId(), Arrays.asList(2)); if (CollectionUtils.isNotEmpty(salaryAcctResultTemplatePOS)) { String items = salaryAcctResultTemplatePOS.get(0).getSalaryItemIds(); - checkItems = Arrays.stream(items.split(",")).map(Long::valueOf).collect(Collectors.toList()); + checkItems = StrUtil.isNotEmpty(items) ? Arrays.stream(items.split(",")).map(Long::valueOf).collect(Collectors.toList()) : new ArrayList<>(); } // 必须选择导入模板所需的薪资项目 From a0bc3b545278b034e5f94dbf9041b4f6f4bd9666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 11 Oct 2024 17:32:02 +0800 Subject: [PATCH 106/124] =?UTF-8?q?=E8=AE=B0=E5=BD=95=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryAcctExcelServiceImpl.java | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 75b63245c..c7f3be70b 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -71,6 +71,7 @@ import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.BeanUtils; +import org.springframework.util.StopWatch; import weaver.file.ImageFileManager; import weaver.hrm.User; @@ -1036,6 +1037,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc } private Map batchImport(SalaryAcctImportParam param, String importType) { + StopWatch stopWatch = new StopWatch("导入核算数据"); + stopWatch.start("数据准备"); Map apidatas = new HashMap(); ValidUtil.doValidator(param); Date now = new Date(); @@ -1053,27 +1056,38 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc if (salaryAcctRecordPO == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); } + stopWatch.stop(); // 薪资账套下的薪资项目副本 + stopWatch.start("薪资账套下的薪资项目副本"); List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); // 薪资项目 Set salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); List salaryItems = getSalaryItemService(user).listByIds(salaryItemIds); Map salaryItemMap = SalaryEntityUtil.convert2Map(salaryItems, SalaryItemPO::getName, SalaryItemPO::getId); + stopWatch.stop(); // 薪资核算确认的人员 + stopWatch.start("薪资核算确认的人员"); List salaryAcctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salaryAcctRecordId); Map salaryAcctEmployeeMap = SalaryEntityUtil.convert2Map(salaryAcctEmployees, e -> e.getEmployeeId() + "-" + e.getTaxAgentId()); + stopWatch.stop(); // 租户下所有的人员 + stopWatch.start("薪资核算确认的人员"); List salaryEmployees = getSalaryEmployeeService(user).listAllForReport(); Map salaryEmployeeMap = SalaryEntityUtil.convert2Map(salaryEmployees, DataCollectionEmployee::getUsername, DataCollectionEmployee::getEmployeeId); Map emps = SalaryEntityUtil.convert2Map(salaryEmployees, DataCollectionEmployee::getEmployeeId); + stopWatch.stop(); // 租户下所有的个税扣缴义务人 + stopWatch.start("租户下所有的个税扣缴义务人"); List taxAgents = getTaxAgentService(user).listAll(); Map taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getName, TaxAgentPO::getId); + stopWatch.stop(); // 薪资核算人员信息字段 + stopWatch.start("薪资核算人员信息字段"); List salarySobEmpFieldPOS = getSalarySobEmpFieldService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); List salarySobEmpFields = SalaryEntityUtil.properties(new SalarySobItemAggregateBO().buildEmpField(salarySobEmpFieldPOS), SalarySobEmpFieldDTO::getFieldName, Collectors.toList()); List excludeFields = Arrays.asList("个税扣缴义务人", "部门", "姓名"); salarySobEmpFields = salarySobEmpFields.stream().filter(field -> !excludeFields.contains(field)).collect(Collectors.toList()); + stopWatch.stop(); // 索引(用于计算进度) int index = 0; // 失败的数量 @@ -1103,10 +1117,10 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); - + stopWatch.start("解析文件"); Workbook workbook = ExcelSupport.parseFile(fileInputStream, EXCEL_TYPE_XLSX); Sheet sheet = workbook.getSheetAt(0); - + stopWatch.stop(); // 错误提示信息 List excelComments = Lists.newArrayList(); @@ -1136,6 +1150,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc if (CollectionUtils.isEmpty(data)) { throw new RuntimeException("无数据"); } + stopWatch.start("解析数据"); for (int i = 0; i < data.size(); i++) { String row = "第" + (i + 3) + "行"; @@ -1365,10 +1380,12 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc } successCount++; } + stopWatch.stop(); // 如果sheet包含错误数据 // if (CollectionUtils.isNotEmpty(errorDatas)) { // salaryBatchService.createErrorExcelSheet(headers, errorDatas, excelSheet.getName(), excelComments, errorExcelSheets); // } + stopWatch.start("插入数据"); if (StringUtils.equals("importExcelAcctResult", importType)) { getSalaryComparisonResultService(user).deleteBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecordId)); if (CollectionUtils.isNotEmpty(excelAcctResults)) { @@ -1421,6 +1438,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc getSalaryAcctEmployeeService(user).batchSave(newSalaryAcctEmployees); } } + stopWatch.stop(); + stopWatch.start("锁定数据"); SalarySysConfPO autoLock = getSalarySysConfService(user).getOneByCode(SalarySysConstant.EDIT_IMPORT_AUTO_LOCK); if (autoLock != null && StringUtils.equals(autoLock.getConfValue(), "1")) { // 导入的列都自动锁定 @@ -1430,6 +1449,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc .lockStatus(LockStatusEnum.LOCK).build(); getSalaryAcctResultService(user).updateLockStatusByParam(updateLockStatusParam); } + stopWatch.stop(); + log.info(stopWatch.prettyPrint()); apidatas.put("successCount", successCount); apidatas.put("errorCount", failCount); From 265ca2a54ec063a0d8e2b383ed865522d3f455cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 11 Oct 2024 18:02:52 +0800 Subject: [PATCH 107/124] =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E6=89=80=E6=9C=89=E8=96=AA=E8=B5=84=E6=98=8E=E7=BB=86=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsEmployeeServiceImpl.java | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java index 5728f0886..93a369d7a 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java @@ -345,18 +345,6 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala @Override public SalaryStatisticsEmployeeDetailResultDTO getDetailSalaryAcctResultByAcctEmp(List salaryAcctEmployeeList) { - if (CollectionUtils.isEmpty(salaryAcctEmployeeList)) { - return SalaryStatisticsEmployeeDetailResultDTO.builder() - .salaryAcctEmployeeList(Collections.emptyList()) - .salaryAcctResultValueList(Collections.emptyList()) - .salaryItemList(Collections.emptyList()) - .build(); - } - - // 获取核算结果数据 - List salaryAcctEmployeeIds = salaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); - List salaryAcctResultValues = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); - // 3.获取薪资项目 List salaryItemList = getSalaryItemService(user).listAll(); salaryItemList = salaryItemList.stream() @@ -376,6 +364,20 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala }) .collect(Collectors.toList()); + if (CollectionUtils.isEmpty(salaryAcctEmployeeList)) { + return SalaryStatisticsEmployeeDetailResultDTO.builder() + .salaryAcctEmployeeList(Collections.emptyList()) + .salaryAcctResultValueList(Collections.emptyList()) + .salaryItemList(salaryItemList) + .build(); + } + + // 获取核算结果数据 + List salaryAcctEmployeeIds = salaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); + List salaryAcctResultValues = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); + + + return SalaryStatisticsEmployeeDetailResultDTO.builder() .salaryAcctEmployeeList(salaryAcctEmployeeList) .salaryAcctResultValueList(salaryAcctResultValues) From c2093995667f984321380480daad9041a935c671 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Sat, 12 Oct 2024 09:38:08 +0800 Subject: [PATCH 108/124] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E4=B8=BB=E9=94=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/mapper/setting/PageListSettingMapper.xml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/com/engine/salary/mapper/setting/PageListSettingMapper.xml b/src/com/engine/salary/mapper/setting/PageListSettingMapper.xml index df06cf162..644707567 100644 --- a/src/com/engine/salary/mapper/setting/PageListSettingMapper.xml +++ b/src/com/engine/salary/mapper/setting/PageListSettingMapper.xml @@ -58,6 +58,9 @@ AND delete_type = #{deleteType} + + AND id = #{id} + AND page = #{page} @@ -94,6 +97,9 @@ delete_type, + + id, + page, @@ -117,6 +123,9 @@ #{deleteType}, + + #{id}, + #{page}, From 49cbb7a7cc91c88d1a4d284c3bacfe105d31d3e1 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 14 Oct 2024 10:38:30 +0800 Subject: [PATCH 109/124] =?UTF-8?q?=E6=B5=AE=E5=8A=A8=E8=96=AA=E9=85=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../po/VariableArchiveItemPO.java | 2 + .../service/VariableArchiveService.java | 2 + .../impl/VariableArchiveItemServiceImpl.java | 6 ++- .../impl/VariableArchiveServiceImpl.java | 40 +++++++++++++++++-- .../salary/web/VariableArchiveController.java | 16 ++++++++ .../wrapper/VariableArchiveWrapper.java | 4 ++ 6 files changed, 66 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/entity/datacollection/po/VariableArchiveItemPO.java b/src/com/engine/salary/entity/datacollection/po/VariableArchiveItemPO.java index 52e9772e4..cd211f2d3 100644 --- a/src/com/engine/salary/entity/datacollection/po/VariableArchiveItemPO.java +++ b/src/com/engine/salary/entity/datacollection/po/VariableArchiveItemPO.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.datacollection.po; +import com.engine.salary.annotation.Encrypt; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -41,6 +42,7 @@ public class VariableArchiveItemPO { /** * 浮动值 */ + @Encrypt private String itemValue; /** diff --git a/src/com/engine/salary/service/VariableArchiveService.java b/src/com/engine/salary/service/VariableArchiveService.java index f82fcc031..4579eba6a 100644 --- a/src/com/engine/salary/service/VariableArchiveService.java +++ b/src/com/engine/salary/service/VariableArchiveService.java @@ -70,4 +70,6 @@ public interface VariableArchiveService { void deleteSelectVariableArchive(Collection deleteIds); List> listBySalaryMonthAndEmployeeIds(YearMonth salaryMonth, List employeeIds, Long taxAgentId); + + void updateData(VariableArchiveSaveParam updateParam); } diff --git a/src/com/engine/salary/service/impl/VariableArchiveItemServiceImpl.java b/src/com/engine/salary/service/impl/VariableArchiveItemServiceImpl.java index bdba34b1a..7e5cacec5 100644 --- a/src/com/engine/salary/service/impl/VariableArchiveItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/VariableArchiveItemServiceImpl.java @@ -1,6 +1,7 @@ package com.engine.salary.service.impl; import com.engine.core.impl.Service; +import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.po.VariableArchiveItemPO; import com.engine.salary.mapper.datacollection.VariableArchiveItemMapper; import com.engine.salary.service.VariableArchiveItemService; @@ -18,6 +19,7 @@ import java.util.List; * @description 浮动薪酬档案明细 */ public class VariableArchiveItemServiceImpl extends Service implements VariableArchiveItemService { + private EncryptUtil encryptUtil = new EncryptUtil(); private VariableArchiveItemMapper getVariableArchiveItemMapper(){ return MapperProxyFactory.getProxy(VariableArchiveItemMapper.class); @@ -34,7 +36,8 @@ public class VariableArchiveItemServiceImpl extends Service implements VariableA if (CollectionUtils.isEmpty(variableArchiveIds)) { return Collections.emptyList(); } - return getVariableArchiveItemMapper().listSome(VariableArchiveItemPO.builder().variableArchiveIds(variableArchiveIds).build()); + List variableArchiveItemPOS = getVariableArchiveItemMapper().listSome(VariableArchiveItemPO.builder().variableArchiveIds(variableArchiveIds).build()); + return encryptUtil.decryptList(variableArchiveItemPOS, VariableArchiveItemPO.class); } /** @@ -52,6 +55,7 @@ public class VariableArchiveItemServiceImpl extends Service implements VariableA if (CollectionUtils.isEmpty(insertList)) { return 0; } + encryptUtil.encryptList(insertList, VariableArchiveItemPO.class); List> partition = Lists.partition(insertList, 50); partition.forEach(part -> getVariableArchiveItemMapper().batchInsert(part)); return 0; diff --git a/src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java b/src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java index b008273c6..6faa540bb 100644 --- a/src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java @@ -151,9 +151,6 @@ public class VariableArchiveServiceImpl extends Service implements VariableArchi */ @Override public List> buildVariableArchiveData(Collection variableArchives) { - if (CollectionUtils.isEmpty(variableArchives)) { - // 无数据 - } List variableArchiveIds = variableArchives.stream().map(VariableArchiveListDTO::getId).collect(Collectors.toList()); // 获取浮动薪资档案所对应的浮动薪资项目数据 List variableArchiveItemList = getVariableArchiveItemService(user).listByVariableArchiveIds(variableArchiveIds); @@ -599,4 +596,41 @@ public class VariableArchiveServiceImpl extends Service implements VariableArchi List variableArchiveListDTO = list(queryParam); return buildVariableArchiveData(variableArchiveListDTO); } + + @Override + public void updateData(VariableArchiveSaveParam updateParam) { + if (updateParam.getId() == null) { + throw new SalaryRunTimeException("参数错误"); + } + // 获取浮动薪酬档案 + VariableArchivePO variableArchivePO = getVariableArchiveMapper().getById(updateParam.getId()); + if (variableArchivePO == null) { + throw new SalaryRunTimeException("浮动薪酬档案不存在或已被删除"); + } + + // 删除原有的浮动薪酬档案明细 + getVariableArchiveItemService(user).deleteByArchiveIds(Collections.singletonList(updateParam.getId())); + + // 保存浮动薪资档案详细信息 + List variableArchiveItemList = new ArrayList<>(); + Date now = new Date(); + updateParam.getItemValueList().forEach(e -> { + variableArchiveItemList.add(VariableArchiveItemPO.builder() + .id(IdGenerator.generate()) + .employeeId(updateParam.getEmployeeId()) + .variableArchiveId(variableArchivePO.getId()) + .variableItemId(e.getVariableItemId()) + .itemValue(e.getItemValue()) + .creator(Long.valueOf(user.getUID())) + .createTime(now) + .updateTime(now) + .deleteType(NumberUtils.INTEGER_ZERO) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build()); + }); + + if (CollectionUtils.isNotEmpty(variableArchiveItemList)) { + getVariableArchiveItemService(user).batchInsert(variableArchiveItemList); + } + } } diff --git a/src/com/engine/salary/web/VariableArchiveController.java b/src/com/engine/salary/web/VariableArchiveController.java index c0eb2de43..1afce5c88 100644 --- a/src/com/engine/salary/web/VariableArchiveController.java +++ b/src/com/engine/salary/web/VariableArchiveController.java @@ -114,6 +114,22 @@ public class VariableArchiveController { return new ResponseResult(user).run(getVariableArchiveWrapper(user)::createData, saveParam); } + /** + * 编辑浮动薪酬档案 + * + * @param request + * @param response + * @param updateParam + * @return + */ + @POST + @Path("/updateData") + @Produces(MediaType.APPLICATION_JSON) + public String updateData(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody VariableArchiveSaveParam updateParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getVariableArchiveWrapper(user)::updateData, updateParam); + } + @GET @Path("/downloadTemplate") diff --git a/src/com/engine/salary/wrapper/VariableArchiveWrapper.java b/src/com/engine/salary/wrapper/VariableArchiveWrapper.java index b26df0cba..a1a1bcb54 100644 --- a/src/com/engine/salary/wrapper/VariableArchiveWrapper.java +++ b/src/com/engine/salary/wrapper/VariableArchiveWrapper.java @@ -123,4 +123,8 @@ public class VariableArchiveWrapper extends Service { public void deleteSelectVariableArchive(Collection deleteIds) { getVariableArchiveService(user).deleteSelectVariableArchive(deleteIds); } + + public void updateData(VariableArchiveSaveParam updateParam) { + getVariableArchiveService(user).updateData(updateParam); + } } From dbd1b574e00e644bc83ab681bd29f5a6f340ae80 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 14 Oct 2024 15:05:22 +0800 Subject: [PATCH 110/124] =?UTF-8?q?=E6=B5=AE=E5=8A=A8=E8=96=AA=E9=85=AC?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/VariableArchiveService.java | 2 +- .../impl/VariableArchiveServiceImpl.java | 2 +- .../salary/web/VariableArchiveController.java | 23 +++++-------------- .../wrapper/VariableArchiveWrapper.java | 2 +- 4 files changed, 9 insertions(+), 20 deletions(-) diff --git a/src/com/engine/salary/service/VariableArchiveService.java b/src/com/engine/salary/service/VariableArchiveService.java index 4579eba6a..280a4064d 100644 --- a/src/com/engine/salary/service/VariableArchiveService.java +++ b/src/com/engine/salary/service/VariableArchiveService.java @@ -40,7 +40,7 @@ public interface VariableArchiveService { * @param variableArchives * @return */ - List> buildVariableArchiveData(Collection variableArchives); + List> buildVariableArchiveData(List variableArchives); /** * 创建浮动薪酬档案 diff --git a/src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java b/src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java index 6faa540bb..389c08788 100644 --- a/src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/VariableArchiveServiceImpl.java @@ -150,7 +150,7 @@ public class VariableArchiveServiceImpl extends Service implements VariableArchi * @return */ @Override - public List> buildVariableArchiveData(Collection variableArchives) { + public List> buildVariableArchiveData(List variableArchives) { List variableArchiveIds = variableArchives.stream().map(VariableArchiveListDTO::getId).collect(Collectors.toList()); // 获取浮动薪资档案所对应的浮动薪资项目数据 List variableArchiveItemList = getVariableArchiveItemService(user).listByVariableArchiveIds(variableArchiveIds); diff --git a/src/com/engine/salary/web/VariableArchiveController.java b/src/com/engine/salary/web/VariableArchiveController.java index 1afce5c88..f179c9683 100644 --- a/src/com/engine/salary/web/VariableArchiveController.java +++ b/src/com/engine/salary/web/VariableArchiveController.java @@ -111,23 +111,12 @@ public class VariableArchiveController { @Produces(MediaType.APPLICATION_JSON) public String createData(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody VariableArchiveSaveParam saveParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getVariableArchiveWrapper(user)::createData, saveParam); - } - - /** - * 编辑浮动薪酬档案 - * - * @param request - * @param response - * @param updateParam - * @return - */ - @POST - @Path("/updateData") - @Produces(MediaType.APPLICATION_JSON) - public String updateData(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody VariableArchiveSaveParam updateParam) { - User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getVariableArchiveWrapper(user)::updateData, updateParam); + if (saveParam.getId() == null) { + return new ResponseResult(user).run(getVariableArchiveWrapper(user)::createData, saveParam); + } else { + // 更新 + return new ResponseResult(user).run(getVariableArchiveWrapper(user)::updateData, saveParam); + } } diff --git a/src/com/engine/salary/wrapper/VariableArchiveWrapper.java b/src/com/engine/salary/wrapper/VariableArchiveWrapper.java index a1a1bcb54..61f9dcc86 100644 --- a/src/com/engine/salary/wrapper/VariableArchiveWrapper.java +++ b/src/com/engine/salary/wrapper/VariableArchiveWrapper.java @@ -52,7 +52,7 @@ public class VariableArchiveWrapper extends Service { //薪资档案列表 PageInfo pageInfo = getVariableArchiveService(user).listPage(queryParam); - Collection salaryArchives = pageInfo.getList(); + List salaryArchives = pageInfo.getList(); // 获取所有浮动薪酬项目 List variableItems = getVariableItemService(user).listAll(); From 6ec7210720582d3a58be522ea557f7e8a0d1fe54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 15 Oct 2024 14:40:04 +0800 Subject: [PATCH 111/124] =?UTF-8?q?=E9=99=A4=E5=8E=BB=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SalaryAcctExcelServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index c7f3be70b..7b0d21ffe 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -1139,7 +1139,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // List> data = ExcelParseHelper.parse2Map(sheet, 1); List> data; // if (StringUtils.equals("importSalaryAcctResult", importType)) { - data = ExcelParseHelper.parse2Map(workbook, 0, 2, 1); + data = ExcelParseHelper.parse2Map(sheet, 2, 1); // } else { // data = ExcelParseHelper.parse2Map(sheet, 1); // } From 5f50c26640f17a8951570da9d0909f2ba55fa97f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 16 Oct 2024 09:30:10 +0800 Subject: [PATCH 112/124] =?UTF-8?q?=E5=8F=96=E6=B6=88=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E5=AF=BC=E5=85=A5vlookup=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SalaryAcctExcelServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 75b63245c..1dd3fbdc5 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -1125,7 +1125,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // List> data = ExcelParseHelper.parse2Map(sheet, 1); List> data; // if (StringUtils.equals("importSalaryAcctResult", importType)) { - data = ExcelParseHelper.parse2Map(workbook, 0, 2, 1); + data = ExcelParseHelper.parse2Map(sheet, 2, 1); // } else { // data = ExcelParseHelper.parse2Map(sheet, 1); // } From e8559e1afa5c328dfb88edd56f9266fabf86a732 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 16 Oct 2024 09:41:55 +0800 Subject: [PATCH 113/124] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=A4=BE=E4=BF=9D?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E5=AF=BC=E5=85=A5=E6=8A=A5=E6=97=A0=E4=BA=BA?= =?UTF-8?q?=E5=91=98=20=EF=BC=88=E5=8E=86=E5=8F=B2=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=85=BC=E5=AE=B9bug=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml | 2 +- src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.xml | 2 +- src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml b/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml index bb3e6b558..644a21d18 100644 --- a/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml +++ b/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml @@ -265,7 +265,7 @@ AND payment_organization = #{paymentOrganization} AND fund_scheme_id is not null AND fund_start_time is not null AND fund_start_time #{billMonth} - AND (fund_end_time is null OR fund_end_time = ]]> #{billMonth}) + AND (fund_end_time is null OR fund_end_time = ]]> #{billMonth} OR fund_end_time ='')