diff --git a/resource/sql/薪资档案重复.sql b/resource/sql/薪资档案重复.sql new file mode 100644 index 000000000..400a2ad97 --- /dev/null +++ b/resource/sql/薪资档案重复.sql @@ -0,0 +1,6 @@ + +select max(id) FROM hrsa_salary_archive where tax_agent_id = 35 and delete_type = 0 GROUP BY employee_id HAVING COUNT(employee_id)>1; + + +update hrsa_salary_archive set delete_type =3 where tax_agent_id = 35 and delete_type = 0 + and id in (select max(id) FROM hrsa_salary_archive where tax_agent_id = 35 and delete_type = 0 GROUP BY employee_id HAVING COUNT(employee_id)>1); \ No newline at end of file diff --git a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java index 4f0dbc199..27aab477b 100644 --- a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java +++ b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java @@ -181,12 +181,12 @@ public class SalaryArchiveBO { Date end = localDateRange.getEndDate(); List list = new ArrayList<>(); - allEmployeeIds.forEach(e->{ + allEmployeeIds.forEach(e -> { // 同一个人的档案数据 - List salaryArchives = salaryArchiveList.stream().filter(f->f.getEmployeeId().equals(e)).collect(Collectors.toList()); + 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 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(); @@ -203,7 +203,7 @@ public class SalaryArchiveBO { 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()); + taxAgent.setEffectiveDateRange(LocalDateRange.builder().fromDate((fromDate.before(start) ? start : fromDate)).endDate(endDate == null || endDate.after(end) ? end : endDate).build()); // 薪资项目数据按个税扣缴义务人切割 if (!isOnlyTaxAgent) { // 开始日期 @@ -222,11 +222,11 @@ public class SalaryArchiveBO { if (fromDateItem.after(endTempItem) || endTempItem.before(startItem)) { continue; } - if ( endTempItem.equals(startItem) && flag) { + if (endTempItem.equals(startItem) && flag) { continue; } SalaryArchiveItemDataDTO salaryArchiveItemData = new SalaryArchiveItemDataDTO(); - salaryArchiveItemData.setEffectiveDateRange(LocalDateRange.builder().fromDate((fromDateItem.before(startItem)?startItem:fromDateItem)).endDate(endTempItem).build()); + salaryArchiveItemData.setEffectiveDateRange(LocalDateRange.builder().fromDate((fromDateItem.before(startItem) ? startItem : fromDateItem)).endDate(endTempItem).build()); salaryArchiveItemData.setSalaryItemId(salaryArchiveItem.getSalaryItemId()); salaryArchiveItemData.setValue(salaryArchiveItem.getItemValue()); salaryItemValues.add(salaryArchiveItemData); @@ -323,6 +323,7 @@ public class SalaryArchiveBO { .id(IdGenerator.generate()) .employeeId(change.getEmployeeId()) .taxAgentId(change.getTaxAgentId()) + .employeeType(change.getEmployeeType()) .runStatus(SalaryArchiveStatusEnum.PENDING.getValue()) // .incomeCategory(IncomeCategoryEnum.WAGES_AND_SALARIES.getValue()) // .modifier(0L) diff --git a/src/com/engine/salary/entity/salaryarchive/po/SalaryArchivePO.java b/src/com/engine/salary/entity/salaryarchive/po/SalaryArchivePO.java index 542b69380..1b44a0d7a 100644 --- a/src/com/engine/salary/entity/salaryarchive/po/SalaryArchivePO.java +++ b/src/com/engine/salary/entity/salaryarchive/po/SalaryArchivePO.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.salaryarchive.po; +import com.engine.salary.enums.datacollection.DataCollectionEmployeeTypeEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveStatusEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveAddTypeEnum; import com.fasterxml.jackson.annotation.JsonFormat; @@ -57,6 +58,14 @@ public class SalaryArchivePO { */ private String runStatus; + /** + * 人员类型,0或null组织架构,1非系统人员 + * + * @see DataCollectionEmployeeTypeEnum + */ + private Integer employeeType; + + /** * 定薪类型 * @@ -102,6 +111,7 @@ public class SalaryArchivePO { private Long taxAgentId; + //---------条件------- private Collection ids; private Collection employeeIds; diff --git a/src/com/engine/salary/entity/taxagent/param/TaxAgentManageRangeExtSaveParam.java b/src/com/engine/salary/entity/taxagent/param/TaxAgentManageRangeExtSaveParam.java new file mode 100644 index 000000000..a4e4969cf --- /dev/null +++ b/src/com/engine/salary/entity/taxagent/param/TaxAgentManageRangeExtSaveParam.java @@ -0,0 +1,36 @@ +package com.engine.salary.entity.taxagent.param; + +import lombok.Data; + +import java.util.List; + +/** + * 外部人员管理范围保存参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +public class TaxAgentManageRangeExtSaveParam { + + /** + * 对象id + */ + private List targetIds; + + /** + * 对象类型。1:外部人员 + */ + private Long targetType; + + /** + * 个税扣缴义务人的id + */ + private Long taxAgentId; + + //是否同步/异步执行生成档案 + private boolean sync; + +} diff --git a/src/com/engine/salary/entity/taxagent/po/TaxAgentEmpChangePO.java b/src/com/engine/salary/entity/taxagent/po/TaxAgentEmpChangePO.java index 505112ce2..90d382f0a 100644 --- a/src/com/engine/salary/entity/taxagent/po/TaxAgentEmpChangePO.java +++ b/src/com/engine/salary/entity/taxagent/po/TaxAgentEmpChangePO.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.taxagent.po; +import com.engine.salary.enums.datacollection.DataCollectionEmployeeTypeEnum; import com.engine.salary.enums.taxagent.TaxAgentEmpChangeModuleEnum; import com.engine.salary.enums.taxagent.TaxAgentEmpChangeTypeEnum; import lombok.AllArgsConstructor; @@ -59,6 +60,13 @@ public class TaxAgentEmpChangePO { */ private Integer moduleType; + /** + * 人员类型,0或null组织架构,1非系统人员 + * + * @see DataCollectionEmployeeTypeEnum + */ + private Integer employeeType; + /** * 租户key */ diff --git a/src/com/engine/salary/entity/taxagent/po/TaxAgentEmpPO.java b/src/com/engine/salary/entity/taxagent/po/TaxAgentEmpPO.java index 671adb4a6..ba8c2f0c1 100644 --- a/src/com/engine/salary/entity/taxagent/po/TaxAgentEmpPO.java +++ b/src/com/engine/salary/entity/taxagent/po/TaxAgentEmpPO.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.taxagent.po; +import com.engine.salary.enums.datacollection.DataCollectionEmployeeTypeEnum; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -68,6 +69,13 @@ public class TaxAgentEmpPO { */ private Date updateTime; + /** + * 人员类型,0或null组织架构,1非系统人员 + * + * @see DataCollectionEmployeeTypeEnum + */ + private Integer employeeType; + private Collection taxAgentIds; private Collection ids; } diff --git a/src/com/engine/salary/entity/taxagent/po/TaxAgentExtRangePO.java b/src/com/engine/salary/entity/taxagent/po/TaxAgentExtRangePO.java new file mode 100644 index 000000000..7c2e483e2 --- /dev/null +++ b/src/com/engine/salary/entity/taxagent/po/TaxAgentExtRangePO.java @@ -0,0 +1,61 @@ +package com.engine.salary.entity.taxagent.po; + +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 TaxAgentExtRangePO { + + /** + * 主键id + */ + private Long id; + /** + * 对象id + */ + private Long targetId; + /** + * 对象类型。1:外部人员 + */ + private Integer targetType; + /** + * 个税扣缴义务人的id + */ + private Long taxAgentId; + /** + * 租户ID + */ + private String tenantKey; + /** + * 更新时间 + */ + private Date updateTime; + + /** + * 创建时间 + */ + private Date createTime; + /** + * 创建人 + */ + private Long creator; + /** + * 是否已删除。0:未删除、1:已删除 + */ + private Integer deleteType; + + //主键id集合 + private Collection ids; + +} \ No newline at end of file diff --git a/src/com/engine/salary/enums/datacollection/DataCollectionEmployeeTypeEnum.java b/src/com/engine/salary/enums/datacollection/DataCollectionEmployeeTypeEnum.java new file mode 100644 index 000000000..6811ae3fb --- /dev/null +++ b/src/com/engine/salary/enums/datacollection/DataCollectionEmployeeTypeEnum.java @@ -0,0 +1,53 @@ +package com.engine.salary.enums.datacollection; + +import com.engine.salary.enums.BaseEnum; + +import java.util.Arrays; +import java.util.Optional; + +/** + * 人员类型 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public enum DataCollectionEmployeeTypeEnum implements BaseEnum { + + ORGANIZATION(0, "组织架构", 109125), + EXT_EMPLOYEE(1, "非系统人员", 119127), + ; + + private int value; + + private String defaultLabel; + + private int labelId; + + DataCollectionEmployeeTypeEnum(int value, String defaultLabel, int labelId) { + this.value = value; + this.defaultLabel = defaultLabel; + this.labelId = labelId; + } + + @Override + public Integer getValue() { + return value; + } + + @Override + public Integer getLabelId() { + return labelId; + } + + @Override + public String getDefaultLabel() { + return defaultLabel; + } + + public static String getNameByValue(String value) { + Optional optional = Arrays.stream(DataCollectionEmployeeTypeEnum.values()).filter(r -> r.getValue().toString().equals(value)).findFirst(); + return optional.isPresent() ? optional.get().name() : ""; + } +} diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml index 7382ac4b6..36b599165 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml @@ -13,6 +13,7 @@ + @@ -30,6 +31,7 @@ , t.pay_start_date , t.pay_end_date , t.run_status + , t.employee_type @@ -53,6 +55,7 @@ pay_start_date=#{payStartDate}, pay_end_date=#{payEndDate}, run_status=#{runStatus}, + employee_type=#{employeeType}, WHERE id = #{id} @@ -88,6 +91,7 @@ , t.pay_start_date , t.pay_end_date , t.run_status + , t.employee_type , e.mobile , e.workcode , e.lastname as username @@ -110,6 +114,7 @@ LEFT JOIN hrmdepartment d ON d.id = e.departmentid LEFT JOIN hrmsubcompany c ON c.id = e.subcompanyid1 WHERE t.delete_type = 0 + and t.employee_type is null and e.status not in (7) and (e.accounttype is null or e.accounttype = 0) @@ -185,6 +190,7 @@ LEFT JOIN hrmdepartment d ON d.id = e.departmentid LEFT JOIN hrmsubcompany c ON c.id = e.subcompanyid1 WHERE t.delete_type = 0 + and t.employee_type is null and e.status not in (7) and (e.accounttype is null or e.accounttype = 0) @@ -258,6 +264,7 @@ LEFT JOIN hrmdepartment d ON d.id = e.departmentid LEFT JOIN hrmsubcompany c ON c.id = e.subcompanyid1 WHERE t.delete_type = 0 + and t.employee_type is null and e.status not in (7) and (e.accounttype is null or e.accounttype = 0) @@ -331,7 +338,8 @@ tax_agent_id, pay_start_date, pay_end_date, - run_status + run_status, + employee_type ) VALUES @@ -345,7 +353,8 @@ #{item.taxAgentId}, #{item.payStartDate}, #{item.payEndDate}, - #{item.runStatus} + #{item.runStatus}, + #{item.employeeType} ) @@ -360,7 +369,8 @@ tax_agent_id, pay_start_date, pay_end_date, - run_status + run_status, + employee_type ) @@ -374,7 +384,8 @@ #{item.taxAgentId,jdbcType=DOUBLE}, #{item.payStartDate,jdbcType=DATE}, #{item.payEndDate,jdbcType=DATE}, - #{item.runStatus,jdbcType=VARCHAR} + #{item.runStatus,jdbcType=VARCHAR}, + #{item.employeeType,jdbcType=INTEGER} from dual @@ -390,7 +401,8 @@ tax_agent_id, pay_start_date, pay_end_date, - run_status + run_status, + employee_type ) VALUES ( @@ -403,7 +415,8 @@ #{item.taxAgentId}, #{item.payStartDate}, #{item.payEndDate}, - #{item.runStatus} + #{item.runStatus}, + #{item.employeeType} ) diff --git a/src/com/engine/salary/mapper/extemp/ExternalEmployeeMapper.java b/src/com/engine/salary/mapper/extemp/ExternalEmployeeMapper.java index 7fa9abc28..8eeb8f64c 100644 --- a/src/com/engine/salary/mapper/extemp/ExternalEmployeeMapper.java +++ b/src/com/engine/salary/mapper/extemp/ExternalEmployeeMapper.java @@ -20,7 +20,7 @@ public interface ExternalEmployeeMapper { * @param id 主键 * @return 返回记录,没有返回null */ - ExtEmpPO getById(Integer id); + ExtEmpPO getById(Long id); List listSome(ExtEmpPO po); diff --git a/src/com/engine/salary/mapper/taxagent/TaxAgentEmpChangeMapper.xml b/src/com/engine/salary/mapper/taxagent/TaxAgentEmpChangeMapper.xml index c90f38636..5d245ddb7 100644 --- a/src/com/engine/salary/mapper/taxagent/TaxAgentEmpChangeMapper.xml +++ b/src/com/engine/salary/mapper/taxagent/TaxAgentEmpChangeMapper.xml @@ -13,6 +13,7 @@ + @@ -30,6 +31,7 @@ , t.tax_agent_id , t.tenant_key , t.update_time + , t.employee_type @@ -89,6 +91,9 @@ AND update_time = #{updateTime} + + AND employee_type = #{employeeType} + AND id IN @@ -137,6 +142,9 @@ update_time, + + employee_type, + @@ -172,6 +180,9 @@ #{updateTime}, + + #{employeeType}, + @@ -189,6 +200,7 @@ tax_agent_id=#{taxAgentId}, tenant_key=#{tenantKey}, update_time=#{updateTime}, + employee_type=#{employeeType}, WHERE id = #{id} AND delete_type = 0 @@ -228,6 +240,9 @@ update_time=#{updateTime}, + + employee_type=#{employeeType}, + WHERE id = #{id} AND delete_type = 0 @@ -273,6 +288,7 @@ create_time, update_time, creator, + employee_type, tenant_key ) VALUES @@ -287,6 +303,7 @@ #{item.createTime}, #{item.updateTime}, #{item.creator}, + #{item.employeeType}, #{item.tenantKey} ) @@ -302,6 +319,7 @@ create_time, update_time, creator, + employee_type, tenant_key ) @@ -316,6 +334,7 @@ #{item.createTime,jdbcType=DATE}, #{item.updateTime,jdbcType=DATE}, #{item.creator,jdbcType=DOUBLE}, + #{item.employeeType,jdbcType=INTEGER}, #{item.tenantKey,jdbcType=VARCHAR} from dual @@ -332,6 +351,7 @@ create_time, update_time, creator, + employee_type, tenant_key ) VALUES @@ -345,6 +365,7 @@ #{item.createTime}, #{item.updateTime}, #{item.creator}, + #{item.employeeType}, #{item.tenantKey} ) diff --git a/src/com/engine/salary/mapper/taxagent/TaxAgentEmpMapper.xml b/src/com/engine/salary/mapper/taxagent/TaxAgentEmpMapper.xml index 570c3dc72..bae6797bf 100644 --- a/src/com/engine/salary/mapper/taxagent/TaxAgentEmpMapper.xml +++ b/src/com/engine/salary/mapper/taxagent/TaxAgentEmpMapper.xml @@ -2,20 +2,23 @@ - - - - - - - - - + + + + + + + + + + - t.create_time + t + . + create_time , t.creator , t.delete_type , t.employee_id @@ -24,12 +27,13 @@ , t.tax_agent_id , t.tenant_key , t.update_time + , t.employee_type @@ -37,7 +41,7 @@ @@ -45,7 +49,7 @@ + SELECT + + FROM hrsa_tax_agent_ext_range t + WHERE delete_type = 0 + + + + + + + + + + + + INSERT INTO hrsa_tax_agent_ext_range + + + + create_time, + + + creator, + + + delete_type, + + + id, + + + target_id, + + + target_type, + + + tax_agent_id, + + + tenant_key, + + + update_time, + + + + + #{createTime}, + + + #{creator}, + + + #{deleteType}, + + + #{id}, + + + #{targetId}, + + + #{targetType}, + + + #{taxAgentId}, + + + #{tenantKey}, + + + #{updateTime}, + + + + + + + UPDATE hrsa_tax_agent_ext_range + + create_time=#{createTime}, + creator=#{creator}, + delete_type=#{deleteType}, + target_id=#{targetId}, + target_type=#{targetType}, + tax_agent_id=#{taxAgentId}, + tenant_key=#{tenantKey}, + update_time=#{updateTime}, + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_tax_agent_ext_range + + + create_time=#{createTime}, + + + creator=#{creator}, + + + delete_type=#{deleteType}, + + + target_id=#{targetId}, + + + target_type=#{targetType}, + + + tax_agent_id=#{taxAgentId}, + + + tenant_key=#{tenantKey}, + + + update_time=#{updateTime}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_tax_agent_ext_range + 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/ExtEmpService.java b/src/com/engine/salary/service/ExtEmpService.java index 4c2bbf01f..969651b95 100644 --- a/src/com/engine/salary/service/ExtEmpService.java +++ b/src/com/engine/salary/service/ExtEmpService.java @@ -1,5 +1,6 @@ package com.engine.salary.service; +import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.extemp.param.ExtEmpQueryParam; import com.engine.salary.entity.extemp.param.ExtEmpSaveParam; import com.engine.salary.entity.extemp.po.ExtEmpPO; @@ -20,4 +21,13 @@ public interface ExtEmpService { void delete(Collection ids); + DataCollectionEmployee getEmployeeById(Long id); + + /** + * 获取人员信息 + * @param ids + * @return + */ + List getEmployeeByIds(List ids); + } \ No newline at end of file diff --git a/src/com/engine/salary/service/TaxAgentEmpService.java b/src/com/engine/salary/service/TaxAgentEmpService.java index d5c9f6127..6ea2779e4 100644 --- a/src/com/engine/salary/service/TaxAgentEmpService.java +++ b/src/com/engine/salary/service/TaxAgentEmpService.java @@ -38,4 +38,11 @@ public interface TaxAgentEmpService{ * @param currentEmployeeId */ void syncTaxAgentEmployee(List taxAgentEmpSaveParamList, Long currentEmployeeId); + + /** + * 同步外部人员 + * @param taxAgentEmpSaveParamList + * @param currentEmployeeId + */ + void syncTaxAgentExtEmployee(List taxAgentEmpSaveParamList, Long currentEmployeeId); } diff --git a/src/com/engine/salary/service/TaxAgentManageRangeService.java b/src/com/engine/salary/service/TaxAgentManageRangeService.java index 35f665594..baef0ea9d 100644 --- a/src/com/engine/salary/service/TaxAgentManageRangeService.java +++ b/src/com/engine/salary/service/TaxAgentManageRangeService.java @@ -1,10 +1,7 @@ package com.engine.salary.service; import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeListDTO; -import com.engine.salary.entity.taxagent.param.TaxAgentImportParam; -import com.engine.salary.entity.taxagent.param.TaxAgentRangeQueryParam; -import com.engine.salary.entity.taxagent.param.TaxAgentRangeSaveParam; -import com.engine.salary.entity.taxagent.param.TaxAgentSubAdminRangeQueryParam; +import com.engine.salary.entity.taxagent.param.*; import com.engine.salary.entity.taxagent.po.TaxAgentManageRangePO; import com.engine.salary.util.page.PageInfo; @@ -55,6 +52,12 @@ public interface TaxAgentManageRangeService { */ void save(TaxAgentRangeSaveParam saveParam); + /** + * 保存外部人员范围 + * @param saveParam + */ + void saveExtRange(TaxAgentManageRangeExtSaveParam saveParam); + /** * 根据主键id删除管理范围 diff --git a/src/com/engine/salary/service/impl/ExtEmpServiceImpl.java b/src/com/engine/salary/service/impl/ExtEmpServiceImpl.java index e59099e03..46ec42bcc 100644 --- a/src/com/engine/salary/service/impl/ExtEmpServiceImpl.java +++ b/src/com/engine/salary/service/impl/ExtEmpServiceImpl.java @@ -14,6 +14,7 @@ import dm.jdbc.util.IdGenerator; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.BeanUtils; +import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; @@ -82,10 +83,43 @@ public class ExtEmpServiceImpl extends Service implements ExtEmpService { } } - public List cover(List extEmps) { + @Override + public DataCollectionEmployee getEmployeeById(Long id) { + ExtEmpPO po = getExternalEmployeeMapper().getById(id); + return cover(po); + } + + @Override + public List getEmployeeByIds(List ids) { + if (CollectionUtils.isEmpty(ids)) { + return new ArrayList<>(); + } + List extEmpPOS = getExternalEmployeeMapper().listSome(ExtEmpPO.builder().ids(ids).build()); + + return coverList(extEmpPOS); + + } + + + public DataCollectionEmployee cover(ExtEmpPO extPo) { + if (extPo == null) { + return null; + } + DataCollectionEmployee employee = new DataCollectionEmployee(); + BeanUtils.copyProperties(extPo, employee); + employee.setEmployeeId(extPo.getId()); + return employee; + } + + public List coverList(List extEmps) { + if (CollectionUtils.isEmpty(extEmps)) { + return new ArrayList<>(); + } + return extEmps.stream().map(emp -> { DataCollectionEmployee employee = new DataCollectionEmployee(); BeanUtils.copyProperties(emp, employee); + employee.setEmployeeId(emp.getId()); return employee; }).collect(Collectors.toList()); } diff --git a/src/com/engine/salary/service/impl/TaxAgentEmpServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentEmpServiceImpl.java index 4cf2168ed..a5847783f 100644 --- a/src/com/engine/salary/service/impl/TaxAgentEmpServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentEmpServiceImpl.java @@ -7,6 +7,7 @@ import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.taxagent.param.TaxAgentEmpSaveParam; import com.engine.salary.entity.taxagent.po.TaxAgentEmpChangePO; import com.engine.salary.entity.taxagent.po.TaxAgentEmpPO; +import com.engine.salary.enums.datacollection.DataCollectionEmployeeTypeEnum; import com.engine.salary.enums.taxagent.TaxAgentEmpChangeModuleEnum; import com.engine.salary.enums.taxagent.TaxAgentEmpChangeTypeEnum; import com.engine.salary.mapper.taxagent.TaxAgentEmpMapper; @@ -154,4 +155,100 @@ public class TaxAgentEmpServiceImpl extends Service implements TaxAgentEmpServic getTaxAgentEmpChangeService(user).batchInsert(taxAgentEmpChangeList); } } + + @Override + public void syncTaxAgentExtEmployee(List taxAgentEmpSaveParamList, Long currentEmployeeId) { + if (CollectionUtils.isEmpty(taxAgentEmpSaveParamList)) { + return; + } + List taxAgentIds = taxAgentEmpSaveParamList.stream().map(TaxAgentEmpSaveParam::getTaxAgentId).collect(Collectors.toList()); + List taxAgentEmployeeExistList = this.listByTaxAgentIds(taxAgentIds); + Date now = new Date(); + // 关联表 + List taxAgentEmployeeAddList = Lists.newArrayList(); + List taxAgentEmployeeDelIds = Lists.newArrayList(); + // 增量表 + List taxAgentEmpChangeList = Lists.newArrayList(); + + taxAgentEmpSaveParamList.forEach(saveParam -> { + List existList = taxAgentEmployeeExistList.stream().filter(f -> f.getTaxAgentId().equals(saveParam.getTaxAgentId())).collect(Collectors.toList()); + Map taxAgentEmployeeMap = SalaryEntityUtil.convert2Map(existList, e -> e.getTaxAgentId() + "-" + e.getEmployeeId()); + for (DataCollectionEmployee se : saveParam.getSalaryEmployeeList()) { + String key = saveParam.getTaxAgentId() + "-" + se.getEmployeeId(); + // 本地有的不动 + if (taxAgentEmployeeMap.containsKey(key)) { + taxAgentEmployeeMap.remove(key); + continue; + } + taxAgentEmployeeAddList.add(TaxAgentEmpPO.builder() + .id(IdGenerator.generate()) + .taxAgentId(saveParam.getTaxAgentId()) + .employeeId(se.getEmployeeId()) + .employeeName(se.getUsername()) + .employeeType(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue()) + .creator(currentEmployeeId) + .createTime(now) + .updateTime(now) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .deleteType(0) + .build()); + + Arrays.stream(TaxAgentEmpChangeModuleEnum.values()).forEach(e -> { + taxAgentEmpChangeList.add(TaxAgentEmpChangePO.builder() + .id(IdGenerator.generate()) + .taxAgentId(saveParam.getTaxAgentId()) + .employeeId(se.getEmployeeId()) + .employeeName(se.getUsername()) + .changeType(TaxAgentEmpChangeTypeEnum.ADD.getValue()) + .moduleType(e.getValue()) + .employeeType(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue()) + .creator(currentEmployeeId) + .createTime(now) + .updateTime(now) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .deleteType(0) + .build()); + }); + + } + //遍历剩余的就是删除的 + for (String key : taxAgentEmployeeMap.keySet()) { + TaxAgentEmpPO value = taxAgentEmployeeMap.get(key); + taxAgentEmployeeDelIds.add(value.getId()); + + Arrays.stream(TaxAgentEmpChangeModuleEnum.values()).forEach(e -> { + taxAgentEmpChangeList.add(TaxAgentEmpChangePO.builder() + .id(IdGenerator.generate()) + .taxAgentId(saveParam.getTaxAgentId()) + .employeeId(value.getEmployeeId()) + .employeeName(value.getEmployeeName()) + .changeType(TaxAgentEmpChangeTypeEnum.DEL.getValue()) + .moduleType(e.getValue()) + .employeeType(DataCollectionEmployeeTypeEnum.EXT_EMPLOYEE.getValue()) + .creator(currentEmployeeId) + .createTime(now) + .updateTime(now) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .deleteType(0) + .build()); + }); + } + }); + + // 关联表==================================================== + // 新增 + if (CollectionUtils.isNotEmpty(taxAgentEmployeeAddList)) { + List> partition = Lists.partition(taxAgentEmployeeAddList, 100); + partition.forEach(getTaxAgentEmpMapper()::batchInsert); + } + // 删除 + if (CollectionUtils.isNotEmpty(taxAgentEmployeeDelIds)) { + List> partition = Lists.partition(taxAgentEmployeeDelIds, 100); + partition.forEach(getTaxAgentEmpMapper()::deleteByIds); + } + // 增量表==================================================== + if (CollectionUtils.isNotEmpty(taxAgentEmpChangeList)) { + getTaxAgentEmpChangeService(user).batchInsert(taxAgentEmpChangeList); + } + } } diff --git a/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java index c834df650..278570013 100644 --- a/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java @@ -21,6 +21,7 @@ import com.engine.salary.enums.salarysob.TargetTypeEnum; import com.engine.salary.enums.taxagent.TaxAgentRangeTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.sys.SalarySysConfMapper; +import com.engine.salary.mapper.taxagent.TaxAgentExtRangeMapper; import com.engine.salary.mapper.taxagent.TaxAgentManageRangeMapper; import com.engine.salary.service.*; import com.engine.salary.sys.entity.po.SalarySysConfPO; @@ -68,6 +69,10 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM return MapperProxyFactory.getProxy(TaxAgentManageRangeMapper.class); } + private TaxAgentExtRangeMapper getTaxAgentExtRangeMapper() { + return MapperProxyFactory.getProxy(TaxAgentExtRangeMapper.class); + } + private TaxAgentService getTaxAgentService(User user) { return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } @@ -79,11 +84,16 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM private SalaryArchiveService getSalaryArchiveService(User user) { return ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); } - + private SalaryEmployeeService getSalaryEmployeeService(User user) { return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } + private ExtEmpService getExtEmpService(User user) { + return ServiceUtil.getService(ExtEmpServiceImpl.class, user); + } + + private SalarySysConfMapper getSalarySysConfMapper() { return SqlProxyHandle.getProxy(SalarySysConfMapper.class); } @@ -93,7 +103,7 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM } public SIArchivesService getSIArchivesService(User user) { - return ServiceUtil.getService(SIArchivesServiceImpl.class,user); + return ServiceUtil.getService(SIArchivesServiceImpl.class, user); } @@ -348,6 +358,64 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM } + + /** + * 根据个税口角义务人id保存管理范围 + * + * @param saveParam 保存参数 + */ + @Override + public void saveExtRange(TaxAgentManageRangeExtSaveParam saveParam) { + + if (saveParam == null) { + throw new SalaryRunTimeException("参数错误"); + } + Long taxAgentId = saveParam.getTaxAgentId(); + if (Objects.isNull(taxAgentId)) { + throw new SalaryRunTimeException("个税扣缴义务人的id不允许为空"); + } + + + // 查询个税扣缴义务人 + TaxAgentPO taxAgent = getTaxAgentService(user).getById(taxAgentId); + if (Objects.isNull(taxAgent)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(108605, "参数错误,个税扣缴义务人不存在或不在权限范围内")); + } + + List targetIds = saveParam.getTargetIds(); + List employees = getExtEmpService(user).getEmployeeByIds(targetIds); + if (Objects.isNull(employees)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(108605, "参数错误,无此外部人员")); + } + + + /* 同步本地人员范围的关联人员=========================== */ + if (saveParam.isSync()) { + //同步执行 + syncLocalExtEmp(taxAgentId, employees); + } else { + taskExecutor.execute(() -> { + syncLocalExtEmp(taxAgentId, employees); + }); + } + } + + private void syncLocalExtEmp(Long taxAgentId, List allSalaryEmployees) { + + List taxAgentEmpSaveParamList = Collections.singletonList(getTaxAgentEmpSyncParam(taxAgentId, allSalaryEmployees)); + // 同步个税扣缴义务人的人员 + getTaxAgentEmpService(user).syncTaxAgentExtEmployee(taxAgentEmpSaveParamList, (long) user.getUID()); + +// //生成档案 + getSalaryArchiveService(user).handleChangeData(1L); +// //生成社保福利档案 +// String welSign = (String) Util_DataCache.getObjVal("welfareChangeSign"); +// if (welSign == null || "0".equals(welSign)) { +// getSIArchivesService(user).handleChangeData(1L); +// } + } + + /** * 获取个税口角义务人的管理范围 * @@ -549,6 +617,7 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM /** * 导入数据 + * * @param taxAgentImportParam * @return */ @@ -667,18 +736,18 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM } // 设置员工状态 - if(StringUtils.isEmpty(employeeStatusStr)){ + if (StringUtils.isEmpty(employeeStatusStr)) { po.setEmployeeStatus(allEmployeeStatuses); - }else{ + } else { Boolean[] haveError = {false}; // 人员状态字符串转换为对应的value List status = SalaryEmployeeStatusEnum.parseByFormatStr(employeeStatusStr, haveError); - if(haveError[0]){ + if (haveError[0]) { Map errorMessageMap = new HashMap<>(); errorMessageMap.put("message", rowIndex + "员工状态不存在,或格式有误。格式为:试用、正式、临时、试用延期"); errorData.add(errorMessageMap); errorSum += 1; - }else{ + } else { po.setEmployeeStatus(status); } } @@ -687,7 +756,7 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM if (Objects.isNull(taxAgent)) { //个税扣缴义务人不存在 Map errorMessageMap = new HashMap<>(); - errorMessageMap.put("message","个税扣缴义务人不存在或不在权限范围内"); + errorMessageMap.put("message", "个税扣缴义务人不存在或不在权限范围内"); errorData.add(errorMessageMap); errorSum += 1; } @@ -758,7 +827,7 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM } // 多条相同人的则以第一条为准,如果逆序排列(用于重复的则以最后一条为准)Collections.reverse(pos); // 去重(通过记录的唯一条件(人员id) - List finalPos = pos.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getTargetId() ))), ArrayList::new)); + List finalPos = pos.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getTargetId()))), ArrayList::new)); return finalPos; } @@ -770,7 +839,7 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM throw new SalaryRunTimeException("文件不存在"); } Long taxAgentId = importParam.getTaxAgentId(); - if(Objects.isNull(taxAgentId)){ + if (Objects.isNull(taxAgentId)) { throw new SalaryRunTimeException("个税扣缴义务人为空"); } } diff --git a/src/com/engine/salary/web/TaxAgentController.java b/src/com/engine/salary/web/TaxAgentController.java index 812d6d262..161426750 100644 --- a/src/com/engine/salary/web/TaxAgentController.java +++ b/src/com/engine/salary/web/TaxAgentController.java @@ -253,6 +253,14 @@ public class TaxAgentController { return new ResponseResult(user).run(getTaxAgentWrapper(user)::saveRange, saveParam); } + @POST + @Path("/range/ext/save") + @Produces(MediaType.APPLICATION_JSON) + public String saveExtRange(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxAgentManageRangeExtSaveParam saveParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getTaxAgentWrapper(user)::saveExtRange, saveParam); + } + //删除人员范围 @POST @Path("/range/delete") diff --git a/src/com/engine/salary/wrapper/TaxAgentWrapper.java b/src/com/engine/salary/wrapper/TaxAgentWrapper.java index 86df32a70..9ca28c641 100644 --- a/src/com/engine/salary/wrapper/TaxAgentWrapper.java +++ b/src/com/engine/salary/wrapper/TaxAgentWrapper.java @@ -347,6 +347,16 @@ public class TaxAgentWrapper extends Service { return StringUtils.EMPTY; } + /** + * 外部人员范围 + * @param saveParam + * @return + */ + public String saveExtRange(TaxAgentManageRangeExtSaveParam saveParam) { + getTaxAgentManageRangeService(user).saveExtRange(saveParam); + return StringUtils.EMPTY; + } + /** * 删除管理范围 * @@ -438,4 +448,6 @@ public class TaxAgentWrapper extends Service { public Map importData(TaxAgentImportParam taxAgentImportParam) { return getTaxAgentManageRangeService(user).importData(taxAgentImportParam); } + + }