From 09ba495bf385cd215dd50c19b0a4cc1b9f5b0ce3 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 9 Jan 2023 10:01:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=AA=E7=A8=8E=E6=89=A3=E7=BC=B4=E4=B9=89?= =?UTF-8?q?=E5=8A=A1=E4=BA=BA=E6=89=B9=E9=87=8F=E5=AF=BC=E5=85=A5=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TaxAgentManageRangeEmployeeListDTO.java | 67 ++++++ .../taxagent/param/TaxAgentImportParam.java | 24 ++ .../TaxAgentRangeDownloadTemplateParam.java | 22 ++ .../salarysob/SalaryEmployeeStatusEnum.java | 10 + .../salary/service/TaxAgentExcelService.java | 30 +++ .../service/TaxAgentManageRangeService.java | 8 + .../impl/TaxAgentExcelServiceImpl.java | 92 ++++++++ .../impl/TaxAgentManageRangeServiceImpl.java | 209 +++++++++++++++++- .../engine/salary/web/TaxAgentController.java | 71 +++++- .../salary/wrapper/TaxAgentWrapper.java | 32 +++ 10 files changed, 557 insertions(+), 8 deletions(-) create mode 100644 src/com/engine/salary/entity/taxagent/dto/TaxAgentManageRangeEmployeeListDTO.java create mode 100644 src/com/engine/salary/entity/taxagent/param/TaxAgentImportParam.java create mode 100644 src/com/engine/salary/entity/taxagent/param/TaxAgentRangeDownloadTemplateParam.java create mode 100644 src/com/engine/salary/service/TaxAgentExcelService.java create mode 100644 src/com/engine/salary/service/impl/TaxAgentExcelServiceImpl.java diff --git a/src/com/engine/salary/entity/taxagent/dto/TaxAgentManageRangeEmployeeListDTO.java b/src/com/engine/salary/entity/taxagent/dto/TaxAgentManageRangeEmployeeListDTO.java new file mode 100644 index 000000000..a59dea38a --- /dev/null +++ b/src/com/engine/salary/entity/taxagent/dto/TaxAgentManageRangeEmployeeListDTO.java @@ -0,0 +1,67 @@ +package com.engine.salary.entity.taxagent.dto; + +import com.cloudstore.eccom.pc.table.WeaTableType; +import com.engine.salary.annotation.SalaryTable; +import com.engine.salary.annotation.SalaryTableColumn; +import com.engine.salary.annotation.SalaryTableOperate; +import com.engine.salary.annotation.TableTitle; +import com.engine.salary.util.excel.ExcelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author Harryxzy + * @date 2023/01/06 10:48 + * @description 个税扣缴义务人-人员范围 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@SalaryTable(pageId = "a4f85287-e3f9-6614-adn9-7d06e54y6rj8", tableType = WeaTableType.CHECKBOX, operates = { + @SalaryTableOperate(text = "查看明细") +}) +public class TaxAgentManageRangeEmployeeListDTO { + + //主键id + @SalaryTableColumn(column = "id", display = false) + private Long id; + + //员工id + private Long employeeId; + + //姓名 + @SalaryTableColumn(text = "姓名", width = "10%", column = "username") + @TableTitle(title = "姓名", dataIndex = "username", key = "username") + @ExcelProperty(index = 0) + private String username; + + + /** + * 个税扣缴义务人id + */ + private Long taxAgentId; + + //部门 + @SalaryTableColumn(text = "部门", width = "10%", column = "departmentName") + @TableTitle(title = "部门", dataIndex = "departmentName", key = "departmentName") + @ExcelProperty(index = 1) + private String departmentName; + + + //工号 + @SalaryTableColumn(text = "工号", width = "10%", column = "jobNum") + @TableTitle(title = "工号", dataIndex = "jobNum", key = "jobNum") + @ExcelProperty(index = 2) + private String jobNum; + + //手机号 + @SalaryTableColumn(text = "手机号", width = "10%", column = "mobile") + @TableTitle(title = "手机号", dataIndex = "mobile", key = "mobile") + @ExcelProperty(index = 3) + private String mobile; + + +} diff --git a/src/com/engine/salary/entity/taxagent/param/TaxAgentImportParam.java b/src/com/engine/salary/entity/taxagent/param/TaxAgentImportParam.java new file mode 100644 index 000000000..028dc12ee --- /dev/null +++ b/src/com/engine/salary/entity/taxagent/param/TaxAgentImportParam.java @@ -0,0 +1,24 @@ +package com.engine.salary.entity.taxagent.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author Harryxzy + * @date 2023/01/06 9:48 + * @description 个税扣缴义务人人员范围导入 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TaxAgentImportParam { + + //上传文件id + String imageId; + + //个税扣缴义务人 + Long taxAgentId; +} diff --git a/src/com/engine/salary/entity/taxagent/param/TaxAgentRangeDownloadTemplateParam.java b/src/com/engine/salary/entity/taxagent/param/TaxAgentRangeDownloadTemplateParam.java new file mode 100644 index 000000000..3f6919ed2 --- /dev/null +++ b/src/com/engine/salary/entity/taxagent/param/TaxAgentRangeDownloadTemplateParam.java @@ -0,0 +1,22 @@ +package com.engine.salary.entity.taxagent.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author Harryxzy + * @date 2023/01/05 14:39 + * @description 个税扣缴义务人的人员范围导入模板参数 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class TaxAgentRangeDownloadTemplateParam { + /** + * 个税扣缴义务人的id + */ + private Long taxAgentId; +} diff --git a/src/com/engine/salary/enums/salarysob/SalaryEmployeeStatusEnum.java b/src/com/engine/salary/enums/salarysob/SalaryEmployeeStatusEnum.java index b7b944b24..31d5b2741 100644 --- a/src/com/engine/salary/enums/salarysob/SalaryEmployeeStatusEnum.java +++ b/src/com/engine/salary/enums/salarysob/SalaryEmployeeStatusEnum.java @@ -1,6 +1,7 @@ package com.engine.salary.enums.salarysob; +import cn.hutool.core.util.ObjectUtil; import com.engine.salary.enums.BaseEnum; import java.util.ArrayList; @@ -87,4 +88,13 @@ public enum SalaryEmployeeStatusEnum implements BaseEnum { } return results; } + + + public static List getAllSalaryEmployeeStatusValues() { + List values = new ArrayList<>(); + for (SalaryEmployeeStatusEnum statusEnum : SalaryEmployeeStatusEnum.values()) { + values.add(ObjectUtil.toString(statusEnum.getValue())); + } + return values; + } } diff --git a/src/com/engine/salary/service/TaxAgentExcelService.java b/src/com/engine/salary/service/TaxAgentExcelService.java new file mode 100644 index 000000000..ef1e5c55c --- /dev/null +++ b/src/com/engine/salary/service/TaxAgentExcelService.java @@ -0,0 +1,30 @@ +package com.engine.salary.service; + +import com.engine.salary.entity.taxagent.param.TaxAgentImportParam; +import com.engine.salary.entity.taxagent.param.TaxAgentRangeDownloadTemplateParam; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.util.Map; + +/** + * @author Harryxzy + * @date 2023/01/05 15:10 + * @description + */ +public interface TaxAgentExcelService { + + /** + * 下载导入模板 + * + * @param downloadTemplateParam + * @param currentEmployeeId + */ + XSSFWorkbook downloadTemplateRange(TaxAgentRangeDownloadTemplateParam downloadTemplateParam, int currentEmployeeId); + + /** + * 预览 + * @param taxAgentImportParam + * @return + */ + Map preview(TaxAgentImportParam taxAgentImportParam); +} diff --git a/src/com/engine/salary/service/TaxAgentManageRangeService.java b/src/com/engine/salary/service/TaxAgentManageRangeService.java index eaa6c8fe1..35f665594 100644 --- a/src/com/engine/salary/service/TaxAgentManageRangeService.java +++ b/src/com/engine/salary/service/TaxAgentManageRangeService.java @@ -1,6 +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; @@ -9,6 +10,7 @@ import com.engine.salary.util.page.PageInfo; import java.util.Collection; import java.util.List; +import java.util.Map; /** * 个税扣缴义务人的管理范围 @@ -69,4 +71,10 @@ public interface TaxAgentManageRangeService { void deleteByTaxAgentIds(Collection taxAgentIds); void syncManageRange(List taxAgentIds,String index); + + /** + * 人员范围导入 + * @param taxAgentImportParam + */ + Map importData(TaxAgentImportParam taxAgentImportParam); } diff --git a/src/com/engine/salary/service/impl/TaxAgentExcelServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentExcelServiceImpl.java new file mode 100644 index 000000000..334a97a46 --- /dev/null +++ b/src/com/engine/salary/service/impl/TaxAgentExcelServiceImpl.java @@ -0,0 +1,92 @@ +package com.engine.salary.service.impl; + +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeEmployeeListDTO; +import com.engine.salary.entity.taxagent.param.TaxAgentImportParam; +import com.engine.salary.entity.taxagent.param.TaxAgentRangeDownloadTemplateParam; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.service.TaxAgentExcelService; +import com.engine.salary.service.TaxAgentService; +import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.excel.ExcelComment; +import com.engine.salary.util.excel.ExcelParseHelper; +import com.engine.salary.util.excel.ExcelUtil; +import com.google.common.collect.Lists; +import org.apache.commons.lang3.Validate; +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.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author Harryxzy + * @date 2023/01/05 15:11 + * @description + */ +public class TaxAgentExcelServiceImpl extends Service implements TaxAgentExcelService { + + public TaxAgentService getTaxAgentService(User user) { + return ServiceUtil.getService(TaxAgentServiceImpl.class, user); + } + + @Override + public XSSFWorkbook downloadTemplateRange(TaxAgentRangeDownloadTemplateParam downloadTemplateParam, int currentEmployeeId) { + // 没有传递TaxAgentId就是当前登录人能够导入自己所能管理的个税扣缴义务人 + TaxAgentPO taxAgent = downloadTemplateParam.getTaxAgentId() == null ? null : getTaxAgentService(user).getById(downloadTemplateParam.getTaxAgentId()); + //获取操作按钮资源 + List> rowList = getExcelRowList(taxAgent); + // 注释 + List excelComments = Lists.newArrayList(); + excelComments.add(new ExcelComment(0, 0, 1, 2, SalaryI18nUtil.getI18nLabel(100344, "必填"))); + //获取excel + return ExcelUtil.genWorkbookV2(rowList, "个税扣缴义务人人员范围", excelComments); + } + + @Override + public Map preview(TaxAgentImportParam importParam) { + Map apidatas = new HashMap(); + + //excel文件id + String imageId = Util.null2String(importParam.getImageId()); + Validate.notBlank(imageId, "imageId为空"); + + InputStream fileInputStream = null; + try { + fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(imageId)); + List taxAgentManageRangeEmployees = ExcelParseHelper.parse2Map(fileInputStream, TaxAgentManageRangeEmployeeListDTO.class, 0, 1, 4, "TaxAgentEmployee.xlsx"); + apidatas.put("preview", taxAgentManageRangeEmployees); + } finally { + IOUtils.closeQuietly(fileInputStream); + } + return apidatas; + } + + /** + * @description 获取excel数据行 + * @return List> + * @author Harryxzy + * @date 2023/1/5 15:47 + */ + private List> getExcelRowList(TaxAgentPO taxAgent) { + // 表头 + List headers = Lists.newArrayList(); + if (taxAgent == null) { + headers.add(SalaryI18nUtil.getI18nLabel( 86184, "个税扣缴义务人")); + } + headers.add(SalaryI18nUtil.getI18nLabel( 85429, "姓名")); + headers.add(SalaryI18nUtil.getI18nLabel( 86185, "部门")); + headers.add(SalaryI18nUtil.getI18nLabel(86317, "工号")); + headers.add(SalaryI18nUtil.getI18nLabel(86186, "手机号")); + List> rowList = new ArrayList<>(); + rowList.add(headers); + return rowList; + } +} diff --git a/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java index 4e9483bf8..1111153de 100644 --- a/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentManageRangeServiceImpl.java @@ -1,5 +1,6 @@ package com.engine.salary.service.impl; +import com.api.formmode.mybatis.util.SqlProxyHandle; import com.cloudstore.dev.api.util.Util_DataCache; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; @@ -10,34 +11,42 @@ import com.engine.salary.entity.hrm.HrmStatus; import com.engine.salary.entity.hrm.PositionInfo; import com.engine.salary.entity.hrm.SubCompanyInfo; import com.engine.salary.entity.taxagent.bo.TaxAgentBO; +import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeEmployeeListDTO; import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeListDTO; import com.engine.salary.entity.taxagent.param.*; import com.engine.salary.entity.taxagent.po.TaxAgentManageRangePO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.UserStatusEnum; +import com.engine.salary.enums.salarysob.SalaryEmployeeStatusEnum; 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.datacollection.EmployMapper; +import com.engine.salary.mapper.sys.SalarySysConfMapper; import com.engine.salary.mapper.taxagent.TaxAgentManageRangeMapper; -import com.engine.salary.service.SalaryArchiveService; -import com.engine.salary.service.TaxAgentEmpService; -import com.engine.salary.service.TaxAgentManageRangeService; -import com.engine.salary.service.TaxAgentService; +import com.engine.salary.service.*; +import com.engine.salary.sys.entity.po.SalarySysConfPO; 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.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.weaver.util.threadPool.ThreadPoolUtil; import com.weaver.util.threadPool.entity.LocalRunnable; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.math.NumberUtils; +import org.apache.poi.util.IOUtils; +import weaver.file.ImageFileManager; +import weaver.general.Util; import weaver.hrm.User; +import java.io.InputStream; import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -77,6 +86,13 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM return MapperProxyFactory.getProxy(EmployMapper.class); } + private SalarySysConfMapper getSalarySysConfMapper() { + return SqlProxyHandle.getProxy(SalarySysConfMapper.class); + } + + private SalaryEmployeeService getSalaryEmployeeService() { + return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); + } private EmployBiz employBiz = new EmployBiz(); @@ -519,4 +535,189 @@ public class TaxAgentManageRangeServiceImpl extends Service implements TaxAgentM ThreadPoolUtil.execute(localRunnable); } + /** + * 导入数据 + * @param taxAgentImportParam + * @return + */ + @Override + public Map importData(TaxAgentImportParam taxAgentImportParam) { + Boolean openDevolution = getTaxAgentService(user).isOpenDevolution(); + long currentEmployeeId = user.getUID(); + Map apidatas = new HashMap(); + + //查询对于人员信息导入筛选的全局配置 + SalarySysConfPO salarySysConfPO = getSalarySysConfMapper().getOneByCode("matchEmployeeMode"); + String confValue = (salarySysConfPO != null && salarySysConfPO.getConfValue() != null && !"".equals(salarySysConfPO.getConfValue())) ? salarySysConfPO.getConfValue() : "0"; + + //检验参数 + checkImportParam(taxAgentImportParam); + + //excel文件id + String imageId = Util.null2String(taxAgentImportParam.getImageId()); + Validate.notBlank(imageId, "imageId为空"); + //个税扣缴义务人 + Long taxAgentId = taxAgentImportParam.getTaxAgentId(); + TaxAgentPO taxAgent = getTaxAgentService(user).getById(taxAgentId); + InputStream fileInputStream = null; + try { + fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(imageId)); + List rangeEmployees = ExcelParseHelper.parse2Map(fileInputStream, TaxAgentManageRangeEmployeeListDTO.class, 0, 1, 4, "TaxAgentEmployee.xlsx"); + + int total = rangeEmployees.size(); + int index = 0; + int successCount = 0; + int errorCount = 0; + + //人员信息 + List employees = employBiz.listEmployee(); + + // 错误excel内容 + List errorData = new ArrayList<>(); + //合规数据 + List eligibleData = new ArrayList<>(); + // 全部员工状态 + Set allEmployeeStatuses = new HashSet<>(); + allEmployeeStatuses.addAll(SalaryEmployeeStatusEnum.getAllSalaryEmployeeStatusValues()); + + TaxAgentRangeSaveParam taxAgentRangeSaveParam = new TaxAgentRangeSaveParam(); + taxAgentRangeSaveParam.setTaxAgentId(taxAgentId); + taxAgentRangeSaveParam.setIncludeType(1); + taxAgentRangeSaveParam.setSync(true); + taxAgentRangeSaveParam.setEmployeeStatus(allEmployeeStatuses); + + for (int i = 0; i < rangeEmployees.size(); i++) { + TaxAgentManageRangeEmployeeListDTO dto = rangeEmployees.get(i); + //待插入数据库对象 + TaxAgentManageRangeSaveParam.TaxAgentSubAdminRangeTargetParam po = new TaxAgentManageRangeSaveParam.TaxAgentSubAdminRangeTargetParam(); + po.setTargetType(TargetTypeEnum.EMPLOYEE); + + //异常点数量 + int errorSum = 0; + + //行号 + String rowIndex = String.format("第%s行", i + 2); + + //相同的姓名 + String userName = dto.getUsername(); + String deparmentName = dto.getDepartmentName(); + String mobile = dto.getMobile(); + String workcode = dto.getJobNum(); + List employeeSameIds = new ArrayList<>(); + + //筛选导入人员信息可以在人力资源池中匹配到的人员信息 + List emps = getSalaryEmployeeService() + .matchImportEmployee(employees, userName, deparmentName, mobile, workcode, null); + if (CollectionUtils.isNotEmpty(emps)) { + employeeSameIds = emps.stream() + .map(DataCollectionEmployee::getEmployeeId) + .collect(Collectors.toList()); + } + + //当人员信息导入筛选的全局配置为"0"时,姓名才是必填项 + if (StringUtils.isBlank(userName) && "0".equals(confValue)) { + //姓名 不能为空 + //错误消息对象 + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", rowIndex + "姓名不能为空"); + errorData.add(errorMessageMap); + errorSum += 1; + } else if (CollectionUtils.isEmpty(employeeSameIds) || employeeSameIds.size() > 1) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", rowIndex + "员工信息不存在或者存在多个员工"); + errorData.add(errorMessageMap); + errorSum += 1; + } else { + Long employeeId = CollectionUtils.isNotEmpty(employeeSameIds) && employeeSameIds.size() == 1 ? employeeSameIds.get(0) : null; + if (employeeId != null && employeeId > 0) { + po.setTargetId(employeeId); + } else { + //姓名错误,系统内不存在该姓名 + Map errorMessageMap = new HashMap<>(); + errorMessageMap.put("message", rowIndex + "姓名错误,系统内不存在该姓名"); + errorData.add(errorMessageMap); + errorSum += 1; + } + } + + + if (Objects.isNull(taxAgent)) { + //个税扣缴义务人不存在 + Map errorMessageMap = new HashMap<>(); + errorMessageMap.put("message","个税扣缴义务人不存在或不在权限范围内"); + errorData.add(errorMessageMap); + errorSum += 1; + } + + //fixme 分权判断 + if (errorSum == 0) { + successCount += 1; + // 合格数据 + eligibleData.add(po); + } else { + errorCount += 1; + // 添加错误数据 + } + } + + //入库-----------------start + taxAgentRangeSaveParam.setTargetParams(eligibleData); + // 查询已有的管理范围 + List taxAgentManageAllRanges = listByTaxAgentId(taxAgentId); + List taxAgentManageRanges = taxAgentManageAllRanges.stream().filter(f -> f.getIncludeType().equals(taxAgentRangeSaveParam.getIncludeType())).collect(Collectors.toList()); + // 处理一下本次的保存参数(如果原来添加过对应的人员(/部门/岗位),那么本次不需要新增,只需要更新) + TaxAgentBO.Result result = TaxAgentBO.handleTaxAgentRange(taxAgentManageRanges, taxAgentRangeSaveParam, taxAgent.getId(), (long) user.getUID()); + + /* 检查当前个税扣缴义务人的所有人员范围与所有分管理员的管理范围===========================start */ + List allRanges = Lists.newArrayList(taxAgentManageAllRanges); + allRanges.addAll(result.getNeedInsertTaxAgentManageRanges()); + allRanges.addAll(result.getNeedUpdateTaxAgentManageRanges()); + // 去重 + allRanges = allRanges.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getTaxAgentId() + "." + f.getRangeType() + "." + f.getTargetType() + "." + f.getTargetId() + "." + f.getEmployeeStatus() + "." + f.getIncludeType()))), ArrayList::new)); + + List salaryEmployees = getEmployMapper().listAll(); + List allSalaryEmployees = this.getManageRangeSalaryEmployees(taxAgentId, allRanges, salaryEmployees); + + /* 检查当前个税扣缴义务人的所有人员范围与所有分管理员的管理范围===========================end */ + if (CollectionUtils.isNotEmpty(result.getNeedInsertTaxAgentManageRanges())) { + result.getNeedInsertTaxAgentManageRanges().forEach(range -> getTaxAgentManageRangeMapper().insertIgnoreNull(range)); + } + if (CollectionUtils.isNotEmpty(result.getNeedUpdateTaxAgentManageRanges())) { + result.getNeedInsertTaxAgentManageRanges().forEach(range -> getTaxAgentManageRangeMapper().updateIgnoreNull(range)); + } + + /* 同步本地人员范围的关联人员=========================== */ + if (taxAgentRangeSaveParam.isSync()) { + //同步执行 + syncLocalEmp(taxAgentId, allSalaryEmployees, null); + } else { + taskExecutor.execute(() -> { + syncLocalEmp(taxAgentId, allSalaryEmployees, null); + }); + } + //-----------------end + + apidatas.put("successCount", successCount); + apidatas.put("errorCount", errorCount); + apidatas.put("errorData", errorData); + + } finally { + IOUtils.closeQuietly(fileInputStream); + } + return apidatas; + } + + private void checkImportParam(TaxAgentImportParam importParam) { + //excel文件id + String imageId = Util.null2String(importParam.getImageId()); + + if (StringUtils.isBlank(imageId)) { + throw new SalaryRunTimeException("文件不存在"); + } + Long taxAgentId = importParam.getTaxAgentId(); + 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 0b1272f47..ba21cbc70 100644 --- a/src/com/engine/salary/web/TaxAgentController.java +++ b/src/com/engine/salary/web/TaxAgentController.java @@ -7,12 +7,14 @@ import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeFormDTO; import com.engine.salary.entity.taxagent.dto.TaxAgentManageRangeListDTO; import com.engine.salary.entity.taxagent.param.*; import com.engine.salary.entity.taxagent.po.TaxAgentBasePO; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.util.ResponseResult; import com.engine.salary.util.page.PageInfo; import com.engine.salary.wrapper.TaxAgentBaseWrapper; import com.engine.salary.wrapper.TaxAgentSubAdminWrapper; import com.engine.salary.wrapper.TaxAgentWrapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; @@ -21,10 +23,12 @@ import javax.servlet.http.HttpServletResponse; import javax.ws.rs.*; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Map; +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.*; public class TaxAgentController { @@ -258,6 +262,65 @@ public class TaxAgentController { return new ResponseResult, String>(user).run(getTaxAgentWrapper(user)::deleteRange, ids); } + /** + * 下载人员范围导入模板 + * + * @return + */ + @POST + @Path("/range/downloadTemplate") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response downloadTemplateRange(@Context HttpServletRequest request, @Context HttpServletResponse response , @RequestBody TaxAgentRangeDownloadTemplateParam downloadTemplateParam) { + try { + User user = HrmUserVarify.getUser(request, response); + TaxAgentPO taxAgent = downloadTemplateParam.getTaxAgentId() == null ? null : getTaxAgentWrapper(user).getTaxAgentService(user).getById(downloadTemplateParam.getTaxAgentId()); + XSSFWorkbook workbook = getTaxAgentWrapper(user).exportImportTemplate(downloadTemplateParam); + String time = LocalDate.now().toString(); + String fileName = Objects.isNull(taxAgent) ? "人员范围导入模板" + time : taxAgent.getName() + "人员范围导入模板" + 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; + } + } + + /** + * 预览人员范围导入模板 + * + * @return + */ + @POST + @Path("/range/preview") + @Produces(MediaType.APPLICATION_JSON) + public String preview(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxAgentImportParam importParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getTaxAgentWrapper(user)::preview, importParam); + } + + /** + * 个税扣缴义务人人员范围导入 + * + * @return + */ + @POST + @Path("/range/importData") + @Produces(MediaType.APPLICATION_JSON) + public String importEmployeeRange(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxAgentImportParam importParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getTaxAgentWrapper(user)::importData, importParam); + } + /** * 个税扣缴义务人下拉列表 * diff --git a/src/com/engine/salary/wrapper/TaxAgentWrapper.java b/src/com/engine/salary/wrapper/TaxAgentWrapper.java index c4bcd5851..9f9fa2f1f 100644 --- a/src/com/engine/salary/wrapper/TaxAgentWrapper.java +++ b/src/com/engine/salary/wrapper/TaxAgentWrapper.java @@ -23,6 +23,7 @@ import com.google.common.collect.Maps; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.BeanUtils; import weaver.general.Util; import weaver.hrm.User; @@ -60,6 +61,12 @@ public class TaxAgentWrapper extends Service { return ServiceUtil.getService(TaxAgentManageRangeServiceImpl.class, user); } + public TaxAgentExcelService getTaxAgentExcelService(User user) { + return ServiceUtil.getService(TaxAgentExcelServiceImpl.class, user); + } + + + // private PaymentAgencyService paymentAgencyService; // // private SIEmployeeStatusMapper siEmployeeStatusMapper; @@ -406,4 +413,29 @@ public class TaxAgentWrapper extends Service { } return SalaryI18nUtil.getI18nLabel(93945, "同步成功"); } + + /** + * 下载人员范围导入模板 + * @param downloadTemplateParam + * @return + */ + public XSSFWorkbook exportImportTemplate(TaxAgentRangeDownloadTemplateParam downloadTemplateParam) { + return getTaxAgentExcelService(user).downloadTemplateRange(downloadTemplateParam, user.getUID()); + } + + /** + * 预览人员范围 + * @param taxAgentImportParam + */ + public Map preview(TaxAgentImportParam taxAgentImportParam) { + return getTaxAgentExcelService(user).preview(taxAgentImportParam); + } + + /** + * 个税扣缴义务人-人员范围导入 + * @param taxAgentImportParam + */ + public Map importData(TaxAgentImportParam taxAgentImportParam) { + return getTaxAgentManageRangeService(user).importData(taxAgentImportParam); + } }