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/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 f3a419a20..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,16 +475,49 @@ 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(); + 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..1e8fd59cc 100644 --- a/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java +++ b/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java @@ -31,22 +31,24 @@ 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; + private Long subcompanyId; + //岗位 - @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 +90,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 1acd5a90b..d4185e60e 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 @@ -159,6 +174,8 @@ public interface EmployMapper { */ List listBySubCompanyOrDepartment(@Param("subCompanyIds") List subCompanyIds, @Param("departmentIds") List departmentIds); + JobCallInfo getJobCallInfoById(@Param("jobCallId") Long jobCallId); + /** * 根据用户名和工号模糊查询 * @param keyword diff --git a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml index 224cf50b6..279750daa 100644 --- a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml +++ b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml @@ -107,6 +107,13 @@ + + + + + select job.id, + job.jobtitlename as name + from hrmjobcall job + where job.id = #{jobCallId} + \ 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 b8244909f..1ce2b5fa6 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.java +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.java @@ -128,4 +128,6 @@ public interface SalaryAcctEmployeeMapper { List listPage4NotDeclareByParam(@Param("param") AbnormalEmployeeListQueryParam queryParam); int countNotDeclareByParam(@Param("param") AbnormalEmployeeListQueryParam queryParam); + + 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 d228015ab..505c5202a 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml @@ -1414,4 +1414,68 @@ ) + + UPDATE hrsa_salary_acct_emp + + + salary_acct_record_id=#{salaryAcctEmployeePO.salaryAcctRecordId}, + + + salary_sob_id=#{salaryAcctEmployeePO.salarySobId}, + + + employee_id=#{salaryAcctEmployeePO.employeeId}, + + + tax_agent_id=#{salaryAcctEmployeePO.taxAgentId}, + + + salary_month=#{salaryAcctEmployeePO.salaryMonth}, + + + create_time=#{salaryAcctEmployeePO.createTime}, + + + update_time=#{salaryAcctEmployeePO.updateTime}, + + + tenant_key=#{salaryAcctEmployeePO.tenantKey}, + + + employee_type=#{salaryAcctEmployeePO.employeeType}, + + + lock_status=#{salaryAcctEmployeePO.lockStatus}, + + + subcompany_name=#{salaryAcctEmployeePO.subcompanyName}, + + + subcompany_id=#{salaryAcctEmployeePO.subcompanyId}, + + + department_name=#{salaryAcctEmployeePO.departmentName}, + + + department_id=#{salaryAcctEmployeePO.departmentId}, + + + jobtitle_name=#{salaryAcctEmployeePO.jobtitleName}, + + + jobtitle_id=#{salaryAcctEmployeePO.jobtitleId}, + + + jobcall=#{salaryAcctEmployeePO.jobcall}, + + + jobcall_id=#{salaryAcctEmployeePO.jobcallId}, + + + status=#{salaryAcctEmployeePO.status}, + + + WHERE id = #{salaryAcctEmployeePO.id} AND delete_type = 0 + + 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) diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java index a11a964bc..e498c64b1 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java @@ -10,6 +10,7 @@ import com.engine.salary.component.SalaryWeaTable; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.report.common.constant.SalaryConstant; import com.engine.salary.report.entity.bo.SalaryStatisticsReportBO; import com.engine.salary.report.entity.dto.SalaryStatisticsEmployeeDetailResultDTO; @@ -232,6 +233,8 @@ public class SalaryStatisticsEmployeeWrapper extends Service { if (CollectionUtils.isNotEmpty(records)) { List salaryItems = salaryStatisticsEmployeeDetailResult.getSalaryItemList(); + // 过滤只统计数值型薪资项目 + salaryItems = salaryItems.stream().filter(salaryItemPO -> salaryItemPO.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).collect(Collectors.toList()); for (SalaryItemPO item : salaryItems) { BigDecimal sumBigDecimal = new BigDecimal(SalaryStatisticsReportBO.ZERO); String itemKey = item.getId() + SalaryConstant.DYNAMIC_SUFFIX; diff --git a/src/com/engine/salary/service/SalaryAcctEmployeeService.java b/src/com/engine/salary/service/SalaryAcctEmployeeService.java index 505befd94..e1fe3f502 100644 --- a/src/com/engine/salary/service/SalaryAcctEmployeeService.java +++ b/src/com/engine/salary/service/SalaryAcctEmployeeService.java @@ -275,4 +275,9 @@ public interface SalaryAcctEmployeeService { int countNotDeclareByParam(AbnormalEmployeeListQueryParam queryParam); + /** + * 更新 + * @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 548fd84be..b8d737d04 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; @@ -103,14 +104,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); @@ -183,4 +190,11 @@ public interface SalaryEmployeeService { */ List listByKeyword(String keyword); + + /** + * 根据职称id获取职称信息 + * @param jobCallId + * @return + */ + JobCallInfo getJobCallInfoById(Long jobCallId); } 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())) { 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"); diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index a5285439a..dabc4c7c8 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -817,4 +817,8 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct return getSalaryAcctEmployeeMapper().countNotDeclareByParam(queryParam); } + @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 b42c9ce8c..132b66264 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; @@ -604,6 +608,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 89802f50b..ce51390ec 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; @@ -287,6 +288,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)) { @@ -301,6 +310,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)) { @@ -315,6 +329,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(); @@ -535,4 +554,12 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee } return result; } + + @Override + public JobCallInfo getJobCallInfoById(Long jobCallId) { + if (jobCallId == null) { + return null; + } + return SalaryI18nUtil.i18n(getEmployMapper().getJobCallInfoById(jobCallId)); + } }