From 651df1842e74e2aa4553533d67f8b1a3e0c58c14 Mon Sep 17 00:00:00 2001 From: Chengliang <1546584672@qq.com> Date: Mon, 18 Apr 2022 20:24:43 +0800 Subject: [PATCH 01/14] =?UTF-8?q?=E7=A6=8F=E5=88=A9=E5=8F=B0=E8=B4=A6?= =?UTF-8?q?=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SIAccountBiz.java | 167 ++++++ .../dto/InsuranceAccountViewListDTO.java | 24 +- .../siexport/param/InsuranceExportParam.java | 25 + .../entity/siexport/po/AccountExportPO.java | 53 ++ .../salary/mapper/InsuranceExportMapper.java | 18 + .../salary/mapper/InsuranceExportMapper.xml | 34 ++ .../InsuranceAccountDetailMapper.xml | 3 +- .../salary/service/SIAccountService.java | 30 ++ .../salary/service/SIExportService.java | 28 ++ .../salary/service/SISchemeService.java | 6 + .../service/impl/SIAccountServiceImpl.java | 91 +++- .../service/impl/SIExportServiceImpl.java | 474 ++++++++++++++++++ .../service/impl/SISchemeServiceImpl.java | 16 + .../salary/util/SalaryFormItemUtil.java | 24 + .../salary/web/SIAccountController.java | 51 +- .../engine/salary/web/SIExportController.java | 112 +++++ .../salary/wrapper/SIAccountWrapper.java | 31 ++ 17 files changed, 1157 insertions(+), 30 deletions(-) create mode 100644 src/com/engine/salary/entity/siexport/param/InsuranceExportParam.java create mode 100644 src/com/engine/salary/entity/siexport/po/AccountExportPO.java create mode 100644 src/com/engine/salary/mapper/InsuranceExportMapper.java create mode 100644 src/com/engine/salary/mapper/InsuranceExportMapper.xml create mode 100644 src/com/engine/salary/service/SIExportService.java create mode 100644 src/com/engine/salary/service/impl/SIExportServiceImpl.java create mode 100644 src/com/engine/salary/web/SIExportController.java create mode 100644 src/com/engine/salary/wrapper/SIAccountWrapper.java diff --git a/src/com/engine/salary/biz/SIAccountBiz.java b/src/com/engine/salary/biz/SIAccountBiz.java index 3fe2a0ef3..d9520b0bd 100644 --- a/src/com/engine/salary/biz/SIAccountBiz.java +++ b/src/com/engine/salary/biz/SIAccountBiz.java @@ -6,6 +6,8 @@ import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryacct.dto.SalaryAcctProgressDTO; +import com.engine.salary.entity.salaryarchive.po.TaxAgentPO; +import com.engine.salary.entity.siaccount.dto.InsuranceAccountViewListDTO; import com.engine.salary.entity.siaccount.param.*; import com.engine.salary.entity.siaccount.po.InsuranceAccountBatchPO; import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailPO; @@ -14,9 +16,11 @@ import com.engine.salary.entity.siaccount.po.InsuranceAccountInspectPO; import com.engine.salary.entity.siarchives.po.*; import com.engine.salary.entity.sicategory.po.ICategoryPO; import com.engine.salary.entity.sischeme.po.InsuranceSchemeDetailPO; +import com.engine.salary.entity.taxrate.TaxAgent; import com.engine.salary.enums.siaccount.*; import com.engine.salary.enums.sicategory.*; import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.TaxAgentMapper; import com.engine.salary.mapper.datacollection.EmployMapper; import com.engine.salary.mapper.siaccount.InsuranceAccountBatchMapper; import com.engine.salary.mapper.siaccount.InsuranceAccountDetailMapper; @@ -1303,7 +1307,170 @@ public class SIAccountBiz { } + public PageInfo overView(InsuranceAccountDetailParam queryParam) { + PageUtil.start(queryParam.getCurrent(),queryParam.getPageSize()); + List insuranceAccountDetailPOS = MapperProxyFactory.getProxy(InsuranceAccountDetailMapper.class).selectList(queryParam.getBillMonth()); + + //获取扣缴义务人信息 + List paymentList = MapperProxyFactory.getProxy(TaxAgentMapper.class).listAll(); + SalaryAssert.notEmpty(paymentList, SalaryI18nUtil.getI18nLabel( 100341, "该租户无扣缴义务人")); + Map paymentMap = paymentList.stream().collect(Collectors.toMap(TaxAgent::getId, Function.identity())); + List insuranceAccountViewListDTOS = buildRecords(insuranceAccountDetailPOS, paymentMap); + +// List iCategoryPOS = MapperProxyFactory.getProxy(ICategoryMapper.class).listAll(); +// Page page = FormatManager.getTablePage(); +// Page insuranceAccountViewListDTOPage = new Page<>(page.getCurrent(), insuranceAccountViewListDTOS.size(), insuranceAccountViewListDTOS.size(), +// page.isSearchCount()); + + PageInfo insuranceAccountViewListDTOPage = new PageInfo<>(insuranceAccountViewListDTOS,InsuranceAccountViewListDTO.class); + insuranceAccountViewListDTOPage.setTotal(insuranceAccountViewListDTOS.size()); + return insuranceAccountViewListDTOPage; + } + + public List buildRecords(List list, Map paymentMap) { + Map result = new HashMap<>(); + //根据组织分组,对社保进行统计 + Map> socialCollect = list.stream().filter(item -> item.getSocialPayOrg() != null) + .collect(Collectors.groupingBy(InsuranceAccountDetailPO::getSocialPayOrg)); + socialCollect.forEach((k, v) -> { + if (result.get(k) == null) { + InsuranceAccountViewListDTO temp = new InsuranceAccountViewListDTO(); + temp.setPayOrg(paymentMap.get(k).getName()); + result.put(k, temp); + } + InsuranceAccountViewListDTO insuranceAccountViewListDTO = result.get(k); + accountSocialView(insuranceAccountViewListDTO, v); + }); + //根据组织分组,对公积金进行统计 + Map> fundCollect = list.stream().filter(item -> item.getFundPayOrg() != null) + .collect(Collectors.groupingBy(InsuranceAccountDetailPO::getFundPayOrg)); + fundCollect.forEach((k, v) -> { + if (result.get(k) == null) { + InsuranceAccountViewListDTO temp = new InsuranceAccountViewListDTO(); + temp.setPayOrg(paymentMap.get(k).getName()); + result.put(k, temp); + } + InsuranceAccountViewListDTO insuranceAccountViewListDTO = result.get(k); + accountFundView(insuranceAccountViewListDTO, v); + }); + //根据组织分组,对其他福利进行统计 + Map> otherCollect = list.stream().filter(item -> item.getOtherPayOrg() != null) + .collect(Collectors.groupingBy(InsuranceAccountDetailPO::getOtherPayOrg)); + otherCollect.forEach((k, v) -> { + if (result.get(k) == null) { + InsuranceAccountViewListDTO temp = new InsuranceAccountViewListDTO(); + temp.setPayOrg(paymentMap.get(k).getName()); + result.put(k, temp); + } + InsuranceAccountViewListDTO insuranceAccountViewListDTO = result.get(k); + accountOtherView(insuranceAccountViewListDTO, v); + }); + //对各组织进行金额合计 + List viewDTOS = new ArrayList<>(); + result.forEach((k, v) -> { + BigDecimal socialPaySum = StringUtils.isBlank(v.getSocialPaySum()) ? new BigDecimal("0") : new BigDecimal(v.getSocialPaySum()); + BigDecimal fundPaySum = StringUtils.isBlank(v.getFundPaySum()) ? new BigDecimal("0") : new BigDecimal(v.getFundPaySum()); + BigDecimal otherPaySum = StringUtils.isBlank(v.getOtherPaySum()) ? new BigDecimal("0") : new BigDecimal(v.getOtherPaySum()); + v.setIndex(k); + BigDecimal sum = socialPaySum.add(fundPaySum).add(otherPaySum); + v.setSum(sum.toPlainString()); + viewDTOS.add(v); + }); + //合计 + InsuranceAccountViewListDTO insuranceAccountViewListDTO = new InsuranceAccountViewListDTO(); + int socialNum = 0; + int fundNum = 0; + int otherNum = 0; + BigDecimal socialSum = new BigDecimal("0"); + BigDecimal fundSum = new BigDecimal("0"); + BigDecimal otherSum = new BigDecimal("0"); + BigDecimal sum = new BigDecimal("0"); + for (InsuranceAccountViewListDTO item : viewDTOS) { + if (item.getSocialNum() != null) { + socialNum += item.getSocialNum(); + } + if (item.getFundNum() != null) { + fundNum += item.getFundNum(); + } + if (item.getOtherNum() != null) { + otherNum += item.getOtherNum(); + } + if (StringUtils.isNotBlank(item.getSocialPaySum())) { + socialSum = socialSum.add(new BigDecimal(item.getSocialPaySum())); + } + if (StringUtils.isNotBlank(item.getFundPaySum())) { + fundSum = fundSum.add(new BigDecimal(item.getFundPaySum())); + } + if (StringUtils.isNotBlank(item.getOtherPaySum())) { + otherSum = otherSum.add(new BigDecimal(item.getOtherPaySum())); + } + if (StringUtils.isNotBlank(item.getSum())) { + sum = sum.add(new BigDecimal(item.getSum())); + } + } + insuranceAccountViewListDTO.setSum(sum.toPlainString()); + insuranceAccountViewListDTO.setSocialPaySum(socialSum.toPlainString()); + insuranceAccountViewListDTO.setPayOrg(SalaryI18nUtil.getI18nLabel(93278, "合计")); + insuranceAccountViewListDTO.setFundPaySum(fundSum.toPlainString()); + insuranceAccountViewListDTO.setOtherPaySum(otherSum.toPlainString()); + insuranceAccountViewListDTO.setSocialNum(socialNum); + insuranceAccountViewListDTO.setFundNum(fundNum); + insuranceAccountViewListDTO.setOtherNum(otherNum); + viewDTOS.add(insuranceAccountViewListDTO); + viewDTOS.forEach(e -> { + e.setSocialPaySum(StringUtils.isBlank(e.getSocialPaySum()) ? "0" : e.getSocialPaySum()); + e.setSocialNum(e.getSocialNum() == null ? 0 : e.getSocialNum()); + e.setFundNum(e.getFundNum() == null ? 0 : e.getFundNum()); + e.setFundPaySum(StringUtils.isBlank(e.getFundPaySum()) ? "0" : e.getFundPaySum()); + e.setOtherPaySum(StringUtils.isBlank(e.getOtherPaySum()) ? "0" : e.getOtherPaySum()); + e.setOtherNum(e.getOtherNum() == null ? 0 : e.getOtherNum()); + e.setSum(SalaryEntityUtil.thousandthConvert(e.getSum())); + e.setSocialPaySum(SalaryEntityUtil.thousandthConvert(e.getSocialPaySum())); + e.setOtherPaySum(SalaryEntityUtil.thousandthConvert(e.getOtherPaySum())); + e.setFundPaySum(SalaryEntityUtil.thousandthConvert(e.getFundPaySum())); + }); + return viewDTOS; + } + + public void accountOtherView(InsuranceAccountViewListDTO dto, List pos) { + int otherNum = 0; + BigDecimal otherPaySum = new BigDecimal("0"); + for (InsuranceAccountDetailPO item : pos) { + if (StringUtils.isNotBlank(item.getOtherSum())) { + otherNum += 1; + otherPaySum = otherPaySum.add(new BigDecimal(item.getOtherSum())); + } + } + dto.setOtherNum(otherNum); + dto.setOtherPaySum(otherPaySum.toPlainString()); + } + + public void accountFundView(InsuranceAccountViewListDTO dto, List pos) { + int fundNum = 0; + BigDecimal fundPaySum = new BigDecimal("0"); + for (InsuranceAccountDetailPO item : pos) { + if (StringUtils.isNotBlank(item.getFundSum())) { + fundNum += 1; + fundPaySum = fundPaySum.add(new BigDecimal(item.getFundSum())); + } + } + dto.setFundNum(fundNum); + dto.setFundPaySum(fundPaySum.toPlainString()); + } + + public void accountSocialView(InsuranceAccountViewListDTO dto, List pos) { + int socialNum = 0; + BigDecimal socialPaySum = new BigDecimal("0"); + for (InsuranceAccountDetailPO item : pos) { + if (StringUtils.isNotBlank(item.getSocialSum())) { + socialNum += 1; + socialPaySum = socialPaySum.add(new BigDecimal(item.getSocialSum())); + } + } + dto.setSocialNum(socialNum); + dto.setSocialPaySum(socialPaySum.toPlainString()); + } } diff --git a/src/com/engine/salary/entity/siaccount/dto/InsuranceAccountViewListDTO.java b/src/com/engine/salary/entity/siaccount/dto/InsuranceAccountViewListDTO.java index 069e739c8..95cdf9fd3 100644 --- a/src/com/engine/salary/entity/siaccount/dto/InsuranceAccountViewListDTO.java +++ b/src/com/engine/salary/entity/siaccount/dto/InsuranceAccountViewListDTO.java @@ -1,6 +1,10 @@ package com.engine.salary.entity.siaccount.dto; +import com.cloudstore.eccom.pc.table.WeaTableType; +import com.engine.salary.annotation.SalaryTable; +import com.engine.salary.annotation.SalaryTableOperate; +import com.engine.salary.annotation.TableTitle; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -16,32 +20,34 @@ import lombok.NoArgsConstructor; @Builder @NoArgsConstructor @AllArgsConstructor +@SalaryTable(pageId = "b3afad76-a971-4fe3-8064-0cabdcb10b18", tableType = WeaTableType.NONE,operates = { +}) public class InsuranceAccountViewListDTO { - //"序号") + @TableTitle(title = "序号", dataIndex = "index", key = "index") private Long index; - //缴纳组织") + @TableTitle(title = "缴纳组织", dataIndex = "payOrg", key = "payOrg") private String payOrg; - //社保人数") + @TableTitle(title = "社保人数", dataIndex = "socialNum", key = "socialNum") private Integer socialNum; - //公积金人数") + @TableTitle(title = "公积金人数", dataIndex = "fundNum", key = "fundNum") private Integer fundNum; - //其他福利人数") + @TableTitle(title = "其他福利人数", dataIndex = "otherNum", key = "otherNum") private Integer otherNum; - //社保缴费合计") + @TableTitle(title = "社保缴费合计", dataIndex = "socialPaySum", key = "socialPaySum") private String socialPaySum; - //公积金缴费合计") + @TableTitle(title = "公积金缴费合计", dataIndex = "fundPaySum", key = "fundPaySum") private String fundPaySum; - //其他福利缴费合计") + @TableTitle(title = "其他福利缴费合计", dataIndex = "otherPaySum", key = "otherPaySum") private String otherPaySum; - //合计") + @TableTitle(title = "合计", dataIndex = "sum", key = "sum") private String sum; } diff --git a/src/com/engine/salary/entity/siexport/param/InsuranceExportParam.java b/src/com/engine/salary/entity/siexport/param/InsuranceExportParam.java new file mode 100644 index 000000000..0e199aaae --- /dev/null +++ b/src/com/engine/salary/entity/siexport/param/InsuranceExportParam.java @@ -0,0 +1,25 @@ +package com.engine.salary.entity.siexport.param; + +import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + + +/** + * @Author weaver_cl + * @Description: TODO 导出 + * @Date 2022/3/7 + * @Version V1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class InsuranceExportParam { + + //@NotBlank + @DataCheck(require = true,message = "账单月份不可为空") + private String billMonth; +} diff --git a/src/com/engine/salary/entity/siexport/po/AccountExportPO.java b/src/com/engine/salary/entity/siexport/po/AccountExportPO.java new file mode 100644 index 000000000..815f85e69 --- /dev/null +++ b/src/com/engine/salary/entity/siexport/po/AccountExportPO.java @@ -0,0 +1,53 @@ +package com.engine.salary.entity.siexport.po; + +import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailPO; +import com.engine.salary.enums.UserStatusEnum; + +/** + * @Author weaver_cl + * @Description: + * @Date 2022/3/7 + * @Version V1.0 + **/ +public class AccountExportPO extends InsuranceAccountDetailPO { + + private String userName; + + private String telephone; + + private String departmentName; + + private UserStatusEnum userStatus; + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getTelephone() { + return telephone; + } + + public void setTelephone(String telephone) { + this.telephone = telephone; + } + + public String getDepartmentName() { + return departmentName; + } + + public void setDepartmentName(String departmentName) { + this.departmentName = departmentName; + } + + public UserStatusEnum getUserStatus() { + return userStatus; + } + + public void setUserStatus(UserStatusEnum userStatus) { + this.userStatus = userStatus; + } +} diff --git a/src/com/engine/salary/mapper/InsuranceExportMapper.java b/src/com/engine/salary/mapper/InsuranceExportMapper.java new file mode 100644 index 000000000..97caecf4f --- /dev/null +++ b/src/com/engine/salary/mapper/InsuranceExportMapper.java @@ -0,0 +1,18 @@ +package com.engine.salary.mapper; + +import com.engine.salary.entity.siexport.po.AccountExportPO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @Author weaver_cl + * @Description: TODO + * @Date 2022/4/18 + * @Version V1.0 + **/ +public interface InsuranceExportMapper { + + List exportAccount(@Param("paymentStatus") Integer paymentStatus, @Param("billMonth") String billMonth); + +} diff --git a/src/com/engine/salary/mapper/InsuranceExportMapper.xml b/src/com/engine/salary/mapper/InsuranceExportMapper.xml new file mode 100644 index 000000000..868c05d33 --- /dev/null +++ b/src/com/engine/salary/mapper/InsuranceExportMapper.xml @@ -0,0 +1,34 @@ + + + + + + + diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml index 132b4035a..c58e7521b 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml @@ -124,7 +124,8 @@ select e.ID as employeeId, e.LASTNAME as username, - d.DEPARTMENTNAME as deparmentName + d.DEPARTMENTNAME as departmentName from hrmresource e left join hrmdepartment d on e.departmentid = d.id where e.status not in (7) diff --git a/src/com/engine/salary/service/SalaryArchiveService.java b/src/com/engine/salary/service/SalaryArchiveService.java index 750eb6c5e..0cb51a7b9 100644 --- a/src/com/engine/salary/service/SalaryArchiveService.java +++ b/src/com/engine/salary/service/SalaryArchiveService.java @@ -121,7 +121,7 @@ public interface SalaryArchiveService { */ List getSalaryArchiveTaxAgentData(LocalDateRange localDateRange, Collection employeeIds); - void importSalaryArchive(SalaryArchiveImportHandleParam param); + Map importSalaryArchive(SalaryArchiveImportHandleParam param); Map preview(SalaryArchiveImportHandleParam param); diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index bf3e33255..7eb434617 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -301,7 +301,6 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc headerList.add(salaryItemPO.getName()); dataIndexList.add("" + salaryItemPO.getId()); } - String[] headers = headerList.toArray(new String[0]); // 查询薪资核算结果 List> resultMapList = getSalaryAcctResultService(user).listByParam(param); @@ -426,7 +425,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // DSTenantKeyThreadVar.tenantKey.remove(); // } // } -// + // @BatchImportHandler("importExcelAcctResult") // @Transactional(rollbackFor = Exception.class) // public void importExcelAcctResult() { @@ -444,15 +443,13 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // DSTenantKeyThreadVar.tenantKey.remove(); // } // } -// -// private void batchImport(BatchDocumentMessage message, String importType) { -// String tenantKey = message.getTenantKey(); -// Long currentEmployeeId = message.getUserId(); + +// private void batchImport(SalaryAcctImportParam param, String importType) { +// ValidUtil.doValidator(param); // LocalDateTime now = LocalDateTime.now(); -// // 前端传入的参数(薪资核算记录的id) -// Map paramMap = JsonUtil.parseMap(message.getUploadSet().getCustomData(), Object.class); +// // // 薪资核算记录的id -// Long salaryAcctRecordId = Long.valueOf(String.valueOf(paramMap.get("salaryAcctRecordId"))); +// Long salaryAcctRecordId = param.getSalaryAcctRecordId(); // // 薪资核算记录 // SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salaryAcctRecordId); // if (salaryAcctRecordPO == null) { @@ -468,11 +465,11 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // List salaryAcctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salaryAcctRecordId); // Map salaryAcctEmployeeMap = SalaryEntityUtil.convert2Map(salaryAcctEmployees, e -> e.getEmployeeId() + "-" + e.getTaxAgentId()); // // 租户下所有的人员 -// List salaryEmployees = getSalaryEmployeeService(user).listAll(tenantKey); -// Map salaryEmployeeMap = SalaryEntityUtil.convert2Map(salaryEmployees, SalaryEmployee::getUsername, SalaryEmployee::getId); +// List salaryEmployees = getSalaryEmployeeService(user).listAll(); +// Map salaryEmployeeMap = SalaryEntityUtil.convert2Map(salaryEmployees, DataCollectionEmployee::getUsername, DataCollectionEmployee::getEmployeeId); // // 租户下所有的个税扣缴义务人 -// List taxAgents = taxAgentService.listAll(tenantKey); -// Map taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getName, TaxAgentPO::getId); +// List taxAgents = taxAgentService.listAll(); +// Map taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgent::getName, TaxAgent::getId); // // // 索引(用于计算进度) // int index = 0; @@ -487,7 +484,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // .reduce(BigDecimal.ZERO, BigDecimal::add) // .intValue(); // // 包含错误提示信息的sheet页 -// List errorExcelSheets = Lists.newArrayList(); +// List> errorExcelSheets = Lists.newArrayList(); // // 解析excel // Set salaryAcctEmpIds = Sets.newHashSet(); // // excel导入了哪些薪资项目 @@ -496,160 +493,165 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // List newSalaryAcctEmployees = Lists.newArrayList(); // // List excelAcctResults = Lists.newArrayList(); -// for (ExcelSheet excelSheet : message.getBatchFile().getExcelSheets()) { -// if (CollectionUtils.isEmpty(excelSheet.getHeader())) { -// continue; -// } -// // 错误提示信息 -// List excelComments = Lists.newArrayList(); -// // 存在错误的那行数据 -// List> errorDatas = Lists.newArrayList(); -// // 表头 -// List headers = excelSheet.getHeader(); -// // 处理数值 -// List> data = excelSheet.getData(); -// if (CollectionUtils.isEmpty(data)) { -// continue; -// } -// for (int i = 0; i < data.size(); i++) { -// int usernameIndex = 0; -// boolean isError = false; -// Map map = data.get(i); -// Long employeeId = 0L; -// Long taxAgentId = 0L; -// List salaryAcctResultsOfOneEmp = Lists.newArrayListWithExpectedSize(headers.size() - 1); -// List excelAcctResultsOfOneEmp = Lists.newArrayListWithExpectedSize(headers.size() - 1); -// for (int j = 0; j < headers.size(); j++) { -// Map header = headers.get(j); -// Object dataKey = header.get("key"); -// if (dataKey == null) { -// continue; -// } -// String dataValue = (String) map.getOrDefault(dataKey.toString(), ""); -// if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(85429, "姓名"), dataKey.toString())) { -// usernameIndex = j; -// if (StringUtils.isEmpty(dataValue)) { -// isError = true; -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102838, "姓名不能为空"), i, i, j, j); -// } else { -// employeeId = salaryEmployeeMap.getOrDefault(dataValue, 0L); -// if (employeeId == null || employeeId <= 0) { -// isError = true; -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100579, "姓名错误,系统内不存在该姓名"), i, i, j, j); -// } -// } -// } else if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), dataKey.toString())) { -// if (StringUtils.isEmpty(dataValue)) { -// isError = true; -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102839, "个税扣缴义务人不能为空"), i, i, j, j); -// } else { -// taxAgentId = taxAgentNameMap.getOrDefault(dataValue, 0L); -// if (taxAgentId == null || taxAgentId <= 0) { -// isError = true; -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102840, "个税扣缴义务人错误,系统内不存在该个税扣缴义务人"), i, i, j, j); -// } -// } -// } else { -// Long salaryItemId = salaryItemMap.get(dataKey.toString()); -// if (salaryItemId == null || salaryItemId <= 0) { -// isError = true; -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102841, "表头错误,本次核算所用账套不包含该薪资项目"), i, i, j, j); -// } else { -// excelSalaryItemIds.add(salaryItemId); -// if (StringUtils.equals("importExcelAcctResult", importType)) { -// ExcelAcctResultPO excelAcctResult = ExcelAcctResultPO.builder() -// .id(IdGenerator.generate()) -// .salaryAcctRecordId(salaryAcctRecordPO.getId()) -// .salarySobId(salaryAcctRecordPO.getSalarySobId()) -// .salaryItemId(salaryItemId) -// .resultValue(dataValue) -// .creator(currentEmployeeId) -// .createTime(now) -// .updateTime(now) -// .deleteType(0) -// .tenantKey(tenantKey) -// .build(); -// excelAcctResultsOfOneEmp.add(excelAcctResult); -// } -// if (StringUtils.equals("importSalaryAcctResult", importType)) { -// SalaryAcctResultPO salaryAcctResult = SalaryAcctResultPO.builder() -// .id(IdGenerator.generate()) -// .salaryAcctRecordId(salaryAcctRecordPO.getId()) -// .salarySobId(salaryAcctRecordPO.getSalarySobId()) -// .salaryItemId(salaryItemId) -// .resultValue(dataValue) -// .creator(currentEmployeeId) -// .createTime(now) -// .updateTime(now) -// .deleteType(0) -// .tenantKey(tenantKey) -// .build(); -// salaryAcctResultsOfOneEmp.add(salaryAcctResult); -// } -// } -// } -// // (如果是线下对比)如果个税扣缴义务人+人员目前不在核算人员里面,不支持导入 -// if (StringUtils.equals("importExcelAcctResult", importType) -// && (employeeId != null && employeeId > 0) -// && (taxAgentId != null && taxAgentId > 0) -// && i == data.size() - 1 -// && !salaryAcctEmployeeMap.containsKey(employeeId + "-" + taxAgentId)) { -// isError = true; -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102842, "本次薪资核算不包含该人员"), i, i, usernameIndex, usernameIndex); -// } -// } -// // 每处理50个数据更新一次进度 -// index++; -// if (index % 50 == 0 || index >= total) { -// salaryBatchService.sendImportRate(message.getBizId(), total, index); -// } -// if (isError) { -// failCount++; -// errorDatas.add(map); +// +// InputStream fileInputStream = null; +// fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); +// +// Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); +// List headers = ExcelSupport.getSheetHeader(sheet, 0); +// +// if (CollectionUtils.isEmpty(headers)) { +// return; +// } +// // 错误提示信息 +// List excelComments = Lists.newArrayList(); +// // 存在错误的那行数据 +// List> errorDatas = Lists.newArrayList(); +// // 表头 +// List headers = excelSheet.getHeader(); +// // 处理数值 +// List> data = excelSheet.getData(); +// if (CollectionUtils.isEmpty(data)) { +// continue; +// } +// for (int i = 0; i < data.size(); i++) { +// int usernameIndex = 0; +// boolean isError = false; +// Map map = data.get(i); +// Long employeeId = 0L; +// Long taxAgentId = 0L; +// List salaryAcctResultsOfOneEmp = Lists.newArrayListWithExpectedSize(headers.size() - 1); +// List excelAcctResultsOfOneEmp = Lists.newArrayListWithExpectedSize(headers.size() - 1); +// for (int j = 0; j < headers.size(); j++) { +// Map header = headers.get(j); +// Object dataKey = header.get("key"); +// if (dataKey == null) { // continue; // } -// SalaryAcctEmployeePO salaryAcctEmployee = salaryAcctEmployeeMap.get(employeeId + "-" + taxAgentId); -// Long salaryAcctEmpId = Optional.ofNullable(salaryAcctEmployee).map(SalaryAcctEmployeePO::getId).orElse(0L); -// if (StringUtils.equals("importExcelAcctResult", importType)) { -// for (ExcelAcctResultPO excelAcctResultPO : excelAcctResultsOfOneEmp) { -// excelAcctResultPO.setEmployeeId(employeeId); -// excelAcctResultPO.setTaxAgentId(taxAgentId); -// excelAcctResultPO.setSalaryAcctEmpId(salaryAcctEmpId); +// String dataValue = (String) map.getOrDefault(dataKey.toString(), ""); +// if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(85429, "姓名"), dataKey.toString())) { +// usernameIndex = j; +// if (StringUtils.isEmpty(dataValue)) { +// isError = true; +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102838, "姓名不能为空"), i, i, j, j); +// } else { +// employeeId = salaryEmployeeMap.getOrDefault(dataValue, 0L); +// if (employeeId == null || employeeId <= 0) { +// isError = true; +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100579, "姓名错误,系统内不存在该姓名"), i, i, j, j); +// } +// } +// } else if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), dataKey.toString())) { +// if (StringUtils.isEmpty(dataValue)) { +// isError = true; +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102839, "个税扣缴义务人不能为空"), i, i, j, j); +// } else { +// taxAgentId = taxAgentNameMap.getOrDefault(dataValue, 0L); +// if (taxAgentId == null || taxAgentId <= 0) { +// isError = true; +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102840, "个税扣缴义务人错误,系统内不存在该个税扣缴义务人"), i, i, j, j); +// } +// } +// } else { +// Long salaryItemId = salaryItemMap.get(dataKey.toString()); +// if (salaryItemId == null || salaryItemId <= 0) { +// isError = true; +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102841, "表头错误,本次核算所用账套不包含该薪资项目"), i, i, j, j); +// } else { +// excelSalaryItemIds.add(salaryItemId); +// if (StringUtils.equals("importExcelAcctResult", importType)) { +// ExcelAcctResultPO excelAcctResult = ExcelAcctResultPO.builder() +// .id(IdGenerator.generate()) +// .salaryAcctRecordId(salaryAcctRecordPO.getId()) +// .salarySobId(salaryAcctRecordPO.getSalarySobId()) +// .salaryItemId(salaryItemId) +// .resultValue(dataValue) +// .creator(currentEmployeeId) +// .createTime(now) +// .updateTime(now) +// .deleteType(0) +// .tenantKey(tenantKey) +// .build(); +// excelAcctResultsOfOneEmp.add(excelAcctResult); +// } +// if (StringUtils.equals("importSalaryAcctResult", importType)) { +// SalaryAcctResultPO salaryAcctResult = SalaryAcctResultPO.builder() +// .id(IdGenerator.generate()) +// .salaryAcctRecordId(salaryAcctRecordPO.getId()) +// .salarySobId(salaryAcctRecordPO.getSalarySobId()) +// .salaryItemId(salaryItemId) +// .resultValue(dataValue) +// .creator(currentEmployeeId) +// .createTime(now) +// .updateTime(now) +// .deleteType(0) +// .tenantKey(tenantKey) +// .build(); +// salaryAcctResultsOfOneEmp.add(salaryAcctResult); +// } // } -// excelAcctResults.addAll(excelAcctResultsOfOneEmp); // } -// if (StringUtils.equals("importSalaryAcctResult", importType)) { -// if (salaryAcctEmpId <= 0) { -// SalaryAcctEmployeePO acctEmployee = SalaryAcctEmployeePO.builder() -// .id(IdGenerator.generate()) -// .employeeId(employeeId) -// .salaryAcctRecordId(salaryAcctRecordId) -// .salarySobId(salaryAcctRecordPO.getSalarySobId()) -// .salaryMonth(salaryAcctRecordPO.getSalaryMonth()) -// .taxAgentId(taxAgentId) -// .creator(currentEmployeeId) -// .createTime(now) -// .updateTime(now) -// .deleteType(0) -// .tenantKey(tenantKey) -// .build(); -// newSalaryAcctEmployees.add(acctEmployee); -// salaryAcctEmpId = acctEmployee.getId(); -// } -// for (SalaryAcctResultPO salaryAcctResultPO : salaryAcctResultsOfOneEmp) { -// salaryAcctResultPO.setEmployeeId(employeeId); -// salaryAcctResultPO.setTaxAgentId(taxAgentId); -// salaryAcctResultPO.setSalaryAcctEmpId(salaryAcctEmpId); -// } -// salaryAcctEmpIds.add(salaryAcctEmpId); -// salaryAcctResults.addAll(salaryAcctResultsOfOneEmp); +// // (如果是线下对比)如果个税扣缴义务人+人员目前不在核算人员里面,不支持导入 +// if (StringUtils.equals("importExcelAcctResult", importType) +// && (employeeId != null && employeeId > 0) +// && (taxAgentId != null && taxAgentId > 0) +// && i == data.size() - 1 +// && !salaryAcctEmployeeMap.containsKey(employeeId + "-" + taxAgentId)) { +// isError = true; +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102842, "本次薪资核算不包含该人员"), i, i, usernameIndex, usernameIndex); // } -// successCount++; // } -// // 如果sheet包含错误数据 -// if (CollectionUtils.isNotEmpty(errorDatas)) { -// salaryBatchService.createErrorExcelSheet(headers, errorDatas, excelSheet.getName(), excelComments, errorExcelSheets); +// // 每处理50个数据更新一次进度 +// index++; +// if (index % 50 == 0 || index >= total) { +// salaryBatchService.sendImportRate(message.getBizId(), total, index); // } +// if (isError) { +// failCount++; +// errorDatas.add(map); +// continue; +// } +// SalaryAcctEmployeePO salaryAcctEmployee = salaryAcctEmployeeMap.get(employeeId + "-" + taxAgentId); +// Long salaryAcctEmpId = Optional.ofNullable(salaryAcctEmployee).map(SalaryAcctEmployeePO::getId).orElse(0L); +// if (StringUtils.equals("importExcelAcctResult", importType)) { +// for (ExcelAcctResultPO excelAcctResultPO : excelAcctResultsOfOneEmp) { +// excelAcctResultPO.setEmployeeId(employeeId); +// excelAcctResultPO.setTaxAgentId(taxAgentId); +// excelAcctResultPO.setSalaryAcctEmpId(salaryAcctEmpId); +// } +// excelAcctResults.addAll(excelAcctResultsOfOneEmp); +// } +// if (StringUtils.equals("importSalaryAcctResult", importType)) { +// if (salaryAcctEmpId <= 0) { +// SalaryAcctEmployeePO acctEmployee = SalaryAcctEmployeePO.builder() +// .id(IdGenerator.generate()) +// .employeeId(employeeId) +// .salaryAcctRecordId(salaryAcctRecordId) +// .salarySobId(salaryAcctRecordPO.getSalarySobId()) +// .salaryMonth(salaryAcctRecordPO.getSalaryMonth()) +// .taxAgentId(taxAgentId) +// .creator(currentEmployeeId) +// .createTime(now) +// .updateTime(now) +// .deleteType(0) +// .tenantKey(tenantKey) +// .build(); +// newSalaryAcctEmployees.add(acctEmployee); +// salaryAcctEmpId = acctEmployee.getId(); +// } +// for (SalaryAcctResultPO salaryAcctResultPO : salaryAcctResultsOfOneEmp) { +// salaryAcctResultPO.setEmployeeId(employeeId); +// salaryAcctResultPO.setTaxAgentId(taxAgentId); +// salaryAcctResultPO.setSalaryAcctEmpId(salaryAcctEmpId); +// } +// salaryAcctEmpIds.add(salaryAcctEmpId); +// salaryAcctResults.addAll(salaryAcctResultsOfOneEmp); +// } +// successCount++; +// } +// // 如果sheet包含错误数据 +// if (CollectionUtils.isNotEmpty(errorDatas)) { +// salaryBatchService.createErrorExcelSheet(headers, errorDatas, excelSheet.getName(), excelComments, errorExcelSheets); // } // if (StringUtils.equals("importExcelAcctResult", importType)) { // getSalaryComparisonResultService(user).deleteBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecordId)); @@ -671,7 +673,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // // 发送导入回调信息 // salaryBatchService.sendImportCallBackInfo(message, successCount, failCount, errorExcelSheets); // } -// + // @Override // public Map exportCheckResult( // SalaryCheckResultExportParam exportParam, diff --git a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java index 8838ce614..f94a7e316 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java @@ -181,7 +181,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe } @Override - public XSSFWorkbook exportList( SalaryArchiveQueryParam queryParam) { + public XSSFWorkbook exportList(SalaryArchiveQueryParam queryParam) { // 1.工作簿名称 String sheetName = SalaryI18nUtil.getI18nLabel(85368, "薪资档案"); // 获取所有可被引用的薪资项目 @@ -389,7 +389,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe /** * 导入薪资档案 */ - public void importSalaryArchive(SalaryArchiveImportHandleParam param) { + public Map importSalaryArchive(SalaryArchiveImportHandleParam param) { //1、参数校验 vaildImportParam(param); @@ -435,7 +435,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe // 错误sheet数据 List> errorData = new ArrayList<>(); // 错误提示 - List> excelComments = new ArrayList<>(); + List> excelComments = new ArrayList<>(); for (int i = 0; i < data.size(); i++) { @@ -461,6 +461,13 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe // 4.数据入库处理 handleImportData(isInit, importHandleParam); + Map apidatas = new HashMap<>(); + + apidatas.put("successCount", successCount); + apidatas.put("errorCount", errorCount); + apidatas.put("errorNotice", excelComments); + return apidatas; + } finally { IOUtils.closeQuietly(fileInputStream); } @@ -569,7 +576,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe * @param initImportData * @param importHandleParam */ - private Map validInitImportData(boolean isError, int rowNo, Map map, List> excelComments, int errorCount, int successCount, List> errorData, List initImportData, SalaryArchiveImportHandleParam importHandleParam) { + private Map validInitImportData(boolean isError, int rowNo, Map map, List> excelComments, int errorCount, int successCount, List> errorData, List initImportData, SalaryArchiveImportHandleParam importHandleParam) { Long employeeId = Long.valueOf(Optional.ofNullable(map.get("employeeId")).orElse("0").toString()); Optional optionalInitImport = initImportData.stream().filter(f -> f.getEmployeeId().equals(employeeId)).findFirst(); @@ -596,6 +603,9 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe sames.forEach(e -> { if (!e.isError()) { e.setError(Boolean.TRUE); + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", "该员工的薪资档案记录有误,请检查"); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(101723, "该员工的薪资档案记录有误,请检查"), finalErrorCount.get() + 1, finalErrorCount.get() + 1, 0, 0); finalErrorCount.addAndGet(1); errorData.add(e.getRow()); @@ -618,6 +628,9 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe sames.forEach(e -> { if (!e.isError()) { e.setError(Boolean.TRUE); + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", "该员工的薪资档案记录有误"); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(101723, "该员工的薪资档案记录有误,请检查"), finalErrorCount.get() + 1, finalErrorCount.get() + 1, 0, 0); finalErrorCount.addAndGet(1); errorData.add(e.getRow()); @@ -664,7 +677,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe * @return */ private boolean singleRowCheck(String importType, List allEmployeeIds, Map map, List headers, int effectiveTimeIndex, - List> excelComments, int errorCount, SalaryArchiveImportHandleParam importHandleParam) { + List> excelComments, int errorCount, SalaryArchiveImportHandleParam importHandleParam) { boolean isError = false; boolean isInit = importType.equals(SalaryArchiveImportTypeEnum.INIT.getValue()); @@ -729,6 +742,28 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe // 调整原因列判空(调薪或调整个税扣缴义务人) || (adjustReasonI18n.equals(key) && (isTaxAgentAdjust || isSalaryItemAdjust))); // 判空 + if (userNameI18n.equals(key) && StringUtils.isEmpty(cellVal)) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", key + "不能为空"); + excelComments.add(errorMessageMap); + } + // 个税扣缴义务人列判空(初始化导入或调整个税扣缴义务人) + if ((taxAgentI18n.equals(key) && (isInit || isTaxAgentAdjust)) && StringUtils.isEmpty(cellVal)) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", key + "不能为空"); + excelComments.add(errorMessageMap); + } + if (effectiveTimeI18n.equals(key) && StringUtils.isEmpty(cellVal)) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", key + "不能为空"); + excelComments.add(errorMessageMap); + } + // 调整原因列判空(调薪或调整个税扣缴义务人) + if ((adjustReasonI18n.equals(key) && (isTaxAgentAdjust || isSalaryItemAdjust)) && StringUtils.isEmpty(cellVal)) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", key + "不能为空"); + excelComments.add(errorMessageMap); + } if (isEmpty) { // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100577, "不能为空"), errorCount + 1, errorCount + 1, j, j); isError = true; @@ -736,13 +771,22 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe // 1.姓名列处理 if (!isEmpty && userNameI18n.equals(key)) { if (CollectionUtils.isEmpty(employeeSameIds) || employeeSameIds.size() > 1) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message","员工信息不能为空且不可重复(姓名与部门同时确认唯一)"); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100578, "员工信息不能为空且不可重复(姓名与部门同时确认唯一)"), errorCount + 1, errorCount + 1, j, j); isError = true; } else if (employeeId == null) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message","姓名错误,系统内不存在该姓名"); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100579, "姓名错误,系统内不存在该姓名"), errorCount + 1, errorCount + 1, j, j); isError = true; // (调薪或调整个税扣缴义务人) } else if (finalSalaryArchive == null && (isTaxAgentAdjust || isSalaryItemAdjust)) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message","该人员的薪资档案不存在,请先初始化"); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(101653, "该人员的薪资档案不存在,请先初始化"), errorCount + 1, errorCount + 1, j, j); isError = true; } @@ -751,10 +795,16 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe isError = handleTaxAgent(isError, isInit, effectiveTimeIndex, excelComments, errorCount, j, taxAgentId, effectiveTime, finalSalaryArchive, adjustReason, importHandleParam); // 3.生效时间处理 } else if (!isEmpty && effectiveTimeI18n.equals(key) && effectiveTime == null) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message","生效日期错误或格式不正确,正确格式示例为'2022-01-01'、'2022/1/1'"); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102497, "生效日期错误或格式不正确,正确格式示例为'2022-01-01'、'2022/1/1'"), errorCount + 1, errorCount + 1, j, j); isError = true; // 4.调整原因列处理(调薪或调整个税扣缴义务人) } else if (!isEmpty && adjustReasonI18n.equals(key) && (isTaxAgentAdjust || isSalaryItemAdjust) && StringUtils.isEmpty(adjustReason)) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message","调整原因不存在"); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100591, "调整原因不存在"), errorCount + 1, errorCount + 1, j, j); isError = true; // 5.薪资项目列处理(初始化导入或调薪) @@ -811,7 +861,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe * @return */ private boolean handleTaxAgent(boolean isError, boolean isInit, int effectiveTimeIndex, - List> excelComments, int errorCount, int j, + List> excelComments, int errorCount, int j, Long taxAgentId, Date effectiveTime, SalaryArchivePO finalSalaryArchive, String taxAgentAdjustReason, SalaryArchiveImportHandleParam importHandleParam) { if (taxAgentId == null) { // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100545, "个税扣缴义务人不存在"), errorCount + 1, errorCount + 1, j, j); @@ -835,35 +885,56 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe Date currentEffectiveTime = effectiveTaxAgent.getEffectiveTime(); // 1.1 如果早于<当前已生效 if (effectiveTime.before(currentEffectiveTime)) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message","生效日期不可早于当前已生效的调整日期"); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100429, "生效日期不可早于当前已生效的调整日期"), errorCount + 1, errorCount + 1, effectiveTimeIndex, effectiveTimeIndex); isError = true; isBeforeError = true; // 1.2 如果等于当前已生效 } else if (effectiveTime.equals(currentEffectiveTime)) { if (effectiveBeforeTaxAgent != null && effectiveBeforeTaxAgent.getTaxAgentId().equals(taxAgentId)) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message","调整前后不可相同"); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); isError = true; } if (ineffectiveTaxAgent != null && ineffectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message","与未生效的调整后不可相同"); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); isError = true; } // 1.3 如果>已经生效且<=今天 } else if (effectiveTime.after(currentEffectiveTime) && !effectiveTime.after(importHandleParam.getToday())) { if (effectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message","调整前后不可相同"); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); isError = true; } if (ineffectiveTaxAgent != null && ineffectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message","与未生效的调整后不可相同"); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); isError = true; } // 1.4 如果>今天 } else if (effectiveTime.after(importHandleParam.getToday()) && effectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message","调整前后不可相同"); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); isError = true; } } else if (ineffectiveTaxAgent != null && ineffectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message","与未生效的调整后不可相同"); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); isError = true; } @@ -910,7 +981,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe * @return */ private boolean handleSalaryItem(boolean isError, boolean isInit, int effectiveTimeIndex, - List> excelComments, int errorCount, int j, + List> excelComments, int errorCount, int j, Date effectiveTime, SalaryArchivePO finalSalaryArchive, String salaryItemAdjustReason, SalaryArchiveImportHandleParam importHandleParam, String key, String cellVal, Map map) { Optional optionalSalaryItem = importHandleParam.getSalaryItems().stream().filter(e -> e.getName().equals(key)).findFirst(); @@ -934,35 +1005,56 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe Date currentEffectiveTime = effectiveSalaryItem.getEffectiveTime(); // 1.1 如果早于<当前已生效 if (effectiveTime.before(currentEffectiveTime)) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message","生效日期不可早于当前已生效的调整日期"); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100429, "生效日期不可早于当前已生效的调整日期"), errorCount + 1, errorCount + 1, effectiveTimeIndex, effectiveTimeIndex); isError = true; isBeforeError = true; // 1.2 如果等于当前已生效 } else if (effectiveTime.equals(currentEffectiveTime)) { if (effectiveBeforeSalaryItem != null && effectiveBeforeSalaryItem.getItemValue().equals(cellVal)) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message","调整前后不可相同"); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); isError = true; } if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(cellVal)) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message","与未生效的调整后不可相同"); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); isError = true; } // 1.3 如果>已经生效且<=今天 } else if (effectiveTime.after(currentEffectiveTime) && !effectiveTime.after(importHandleParam.getToday())) { if (effectiveSalaryItem.getItemValue().equals(cellVal)) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message","调整前后不可相同"); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); isError = true; } if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(cellVal)) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message","与未生效的调整后不可相同"); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); isError = true; } // 1.4 如果>今天 } else if (effectiveTime.after(importHandleParam.getToday()) && effectiveSalaryItem.getItemValue().equals(cellVal)) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message","调整前后不可相同"); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j); isError = true; } } else if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(cellVal)) { + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message","与未生效的调整后不可相同"); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j); isError = true; } diff --git a/src/com/engine/salary/web/SalaryArchiveController.java b/src/com/engine/salary/web/SalaryArchiveController.java index 3219d938d..4253d8a11 100644 --- a/src/com/engine/salary/web/SalaryArchiveController.java +++ b/src/com/engine/salary/web/SalaryArchiveController.java @@ -176,7 +176,7 @@ public class SalaryArchiveController { SalaryArchiveImportTypeEnum importTypeEnum = SalaryArchiveImportTypeEnum.parseByValue(queryParam.getImportType()); - String fileName = "薪资档案导入模板-" + importTypeEnum.getDefaultLabel(); + String fileName = "薪资档案导入模板-" + importTypeEnum.getDefaultLabel() + LocalDate.now(); try { fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); @@ -240,6 +240,7 @@ public class SalaryArchiveController { return new ResponseResult>().run(getSalaryArchiveWrapper(user)::preview, importParam); } + //导入 @POST @Path("/importSalaryArchive") @Produces(MediaType.APPLICATION_JSON) @@ -254,7 +255,7 @@ public class SalaryArchiveController { @Produces(MediaType.APPLICATION_JSON) public String searchCondition(@Context HttpServletRequest request, @Context HttpServletResponse response) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>().run(getSalaryArchiveWrapper(user)::searchCondition); + return new ResponseResult>().run(getSalaryArchiveWrapper(user)::searchCondition); } // ******** 薪资档案主表 end ***********************************************************************************************/ diff --git a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java index 50f3f7de3..58bc3d556 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java @@ -263,8 +263,8 @@ public class SalaryArchiveWrapper extends Service { return getSalaryArchiveService(user).preview(param); } - public void importSalaryArchive(SalaryArchiveImportHandleParam param) { - getSalaryArchiveService(user).importSalaryArchive(param); + public Map importSalaryArchive(SalaryArchiveImportHandleParam param) { + return getSalaryArchiveService(user).importSalaryArchive(param); } public XSSFWorkbook exportList(SalaryArchiveQueryParam queryParam) { From c2cbdce9ecfcea4ce6a94ce302c6207e8311e044 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 19 Apr 2022 17:21:27 +0800 Subject: [PATCH 09/14] =?UTF-8?q?=E8=A1=A5=E5=85=85=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryAcctExcelServiceImpl.java | 454 ++++++++++-------- .../impl/SalaryAcctRecordServiceImpl.java | 17 +- 2 files changed, 255 insertions(+), 216 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 7eb434617..d9abbb9b9 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -4,6 +4,7 @@ import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.TaxAgentBiz; +import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryacct.bo.SalaryAcctEmployeeBO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultBO; @@ -11,8 +12,10 @@ import com.engine.salary.entity.salaryacct.dto.SalaryAccEmployeeListDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctImportFieldDTO; import com.engine.salary.entity.salaryacct.dto.SalaryComparisonResultListDTO; import com.engine.salary.entity.salaryacct.param.*; +import com.engine.salary.entity.salaryacct.po.ExcelAcctResultPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; import com.engine.salary.entity.salarysob.dto.SalarySobItemDTO; @@ -25,18 +28,27 @@ import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.service.*; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.excel.ExcelParseHelper; +import com.engine.salary.util.excel.ExcelSupport; import com.engine.salary.util.excel.ExcelUtil; import com.engine.salary.util.valid.ValidUtil; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import weaver.file.ImageFileManager; import weaver.hrm.User; +import java.io.InputStream; import java.util.*; import java.util.stream.Collectors; +import static com.engine.salary.util.excel.ExcelSupport.EXCEL_TYPE_XLSX; + /** * 薪资核算导入导出 *

Copyright: Copyright (c) 2022

@@ -444,235 +456,259 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // } // } -// private void batchImport(SalaryAcctImportParam param, String importType) { -// ValidUtil.doValidator(param); -// LocalDateTime now = LocalDateTime.now(); -// -// // 薪资核算记录的id -// Long salaryAcctRecordId = param.getSalaryAcctRecordId(); -// // 薪资核算记录 -// SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salaryAcctRecordId); -// if (salaryAcctRecordPO == null) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); -// } -// // 薪资账套下的薪资项目副本 -// List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); -// // 薪资项目 -// Set salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); -// List salaryItems = getSalaryItemService(user).listByIds(salaryItemIds); -// Map salaryItemMap = SalaryEntityUtil.convert2Map(salaryItems, SalaryItemPO::getName, SalaryItemPO::getId); -// // 薪资核算确认的人员 -// List salaryAcctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salaryAcctRecordId); -// Map salaryAcctEmployeeMap = SalaryEntityUtil.convert2Map(salaryAcctEmployees, e -> e.getEmployeeId() + "-" + e.getTaxAgentId()); -// // 租户下所有的人员 -// List salaryEmployees = getSalaryEmployeeService(user).listAll(); -// Map salaryEmployeeMap = SalaryEntityUtil.convert2Map(salaryEmployees, DataCollectionEmployee::getUsername, DataCollectionEmployee::getEmployeeId); -// // 租户下所有的个税扣缴义务人 -// List taxAgents = taxAgentService.listAll(); -// Map taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgent::getName, TaxAgent::getId); -// -// // 索引(用于计算进度) -// int index = 0; -// // 失败的数量 -// int failCount = 0; -// // 成功的数量 -// int successCount = 0; -// // 总数 + private Map batchImport(SalaryAcctImportParam param, String importType) { + ValidUtil.doValidator(param); + Date now = new Date(); + + Long currentEmployeeId = (long) user.getUID(); + + // 薪资核算记录的id + Long salaryAcctRecordId = param.getSalaryAcctRecordId(); + // 薪资核算记录 + SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salaryAcctRecordId); + if (salaryAcctRecordPO == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); + } + // 薪资账套下的薪资项目副本 + List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + // 薪资项目 + Set salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); + List salaryItems = getSalaryItemService(user).listByIds(salaryItemIds); + Map salaryItemMap = SalaryEntityUtil.convert2Map(salaryItems, SalaryItemPO::getName, SalaryItemPO::getId); + // 薪资核算确认的人员 + List salaryAcctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salaryAcctRecordId); + Map salaryAcctEmployeeMap = SalaryEntityUtil.convert2Map(salaryAcctEmployees, e -> e.getEmployeeId() + "-" + e.getTaxAgentId()); + // 租户下所有的人员 + List salaryEmployees = getSalaryEmployeeService(user).listAll(); + Map salaryEmployeeMap = SalaryEntityUtil.convert2Map(salaryEmployees, DataCollectionEmployee::getUsername, DataCollectionEmployee::getEmployeeId); + // 租户下所有的个税扣缴义务人 + List taxAgents = taxAgentService.listAll(); + Map taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgent::getName, TaxAgent::getId); + + // 索引(用于计算进度) + int index = 0; + // 失败的数量 + int failCount = 0; + // 成功的数量 + int successCount = 0; + // 总数 // int total = message.getBatchFile().getExcelSheets().stream() // .filter(e -> CollectionUtils.isNotEmpty(e.getHeader()) && CollectionUtils.isNotEmpty(e.getData())) // .map(e -> BigDecimal.valueOf(e.getData().size())) // .reduce(BigDecimal.ZERO, BigDecimal::add) // .intValue(); -// // 包含错误提示信息的sheet页 -// List> errorExcelSheets = Lists.newArrayList(); -// // 解析excel -// Set salaryAcctEmpIds = Sets.newHashSet(); -// // excel导入了哪些薪资项目 -// Set excelSalaryItemIds = Sets.newHashSet(); -// List salaryAcctResults = Lists.newArrayList(); -// List newSalaryAcctEmployees = Lists.newArrayList(); -// -// List excelAcctResults = Lists.newArrayList(); -// -// InputStream fileInputStream = null; -// fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); -// -// Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); -// List headers = ExcelSupport.getSheetHeader(sheet, 0); -// -// if (CollectionUtils.isEmpty(headers)) { -// return; -// } -// // 错误提示信息 -// List excelComments = Lists.newArrayList(); -// // 存在错误的那行数据 -// List> errorDatas = Lists.newArrayList(); -// // 表头 -// List headers = excelSheet.getHeader(); -// // 处理数值 -// List> data = excelSheet.getData(); -// if (CollectionUtils.isEmpty(data)) { -// continue; -// } -// for (int i = 0; i < data.size(); i++) { -// int usernameIndex = 0; -// boolean isError = false; -// Map map = data.get(i); -// Long employeeId = 0L; -// Long taxAgentId = 0L; -// List salaryAcctResultsOfOneEmp = Lists.newArrayListWithExpectedSize(headers.size() - 1); -// List excelAcctResultsOfOneEmp = Lists.newArrayListWithExpectedSize(headers.size() - 1); -// for (int j = 0; j < headers.size(); j++) { -// Map header = headers.get(j); -// Object dataKey = header.get("key"); -// if (dataKey == null) { -// continue; -// } -// String dataValue = (String) map.getOrDefault(dataKey.toString(), ""); -// if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(85429, "姓名"), dataKey.toString())) { -// usernameIndex = j; -// if (StringUtils.isEmpty(dataValue)) { -// isError = true; -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102838, "姓名不能为空"), i, i, j, j); -// } else { -// employeeId = salaryEmployeeMap.getOrDefault(dataValue, 0L); -// if (employeeId == null || employeeId <= 0) { -// isError = true; + // 包含错误提示信息的sheet页 + List> errorExcelSheets = Lists.newArrayList(); + // 解析excel + Set salaryAcctEmpIds = Sets.newHashSet(); + // excel导入了哪些薪资项目 + Set excelSalaryItemIds = Sets.newHashSet(); + List salaryAcctResults = Lists.newArrayList(); + List newSalaryAcctEmployees = Lists.newArrayList(); + + List excelAcctResults = Lists.newArrayList(); + + InputStream fileInputStream = null; + fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); + + Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); + + + // 错误提示信息 + List excelComments = Lists.newArrayList(); + // 存在错误的那行数据 + List> errorDatas = Lists.newArrayList(); + // 表头 + List headers = ExcelSupport.getSheetHeader(sheet, 0); + ; + // 处理数值 + List> data = ExcelParseHelper.parse2Map(sheet, 1); + if (CollectionUtils.isEmpty(headers)) { + throw new RuntimeException("表头为空"); + } + if (CollectionUtils.isEmpty(data)) { + throw new RuntimeException(""); + } + for (int i = 0; i < data.size(); i++) { + int usernameIndex = 0; + boolean isError = false; + Map map = data.get(i); + Long employeeId = 0L; + Long taxAgentId = 0L; + List salaryAcctResultsOfOneEmp = Lists.newArrayListWithExpectedSize(headers.size() - 1); + List excelAcctResultsOfOneEmp = Lists.newArrayListWithExpectedSize(headers.size() - 1); + for (int j = 0; j < headers.size(); j++) { + String header = headers.get(j); + String dataKey = header; + if (dataKey == null) { + continue; + } + String dataValue = (String) map.getOrDefault(dataKey.toString(), ""); + if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(85429, "姓名"), dataKey.toString())) { + usernameIndex = j; + if (StringUtils.isEmpty(dataValue)) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(102838, "姓名不能为空")); + excelComments.add(errorMessageMap); + //salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102838, "姓名不能为空"), i, i, j, j); + } else { + employeeId = salaryEmployeeMap.getOrDefault(dataValue, 0L); + if (employeeId == null || employeeId <= 0) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100579, "姓名错误,系统内不存在该姓名")); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100579, "姓名错误,系统内不存在该姓名"), i, i, j, j); -// } -// } -// } else if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), dataKey.toString())) { -// if (StringUtils.isEmpty(dataValue)) { -// isError = true; + } + } + } else if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), dataKey.toString())) { + if (StringUtils.isEmpty(dataValue)) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100579, SalaryI18nUtil.getI18nLabel(102839, "个税扣缴义务人不能为空"))); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102839, "个税扣缴义务人不能为空"), i, i, j, j); -// } else { -// taxAgentId = taxAgentNameMap.getOrDefault(dataValue, 0L); -// if (taxAgentId == null || taxAgentId <= 0) { -// isError = true; + } else { + taxAgentId = taxAgentNameMap.getOrDefault(dataValue, 0L); + if (taxAgentId == null || taxAgentId <= 0) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100579, SalaryI18nUtil.getI18nLabel(102840, "个税扣缴义务人错误,系统内不存在该个税扣缴义务人"))); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102840, "个税扣缴义务人错误,系统内不存在该个税扣缴义务人"), i, i, j, j); -// } -// } -// } else { -// Long salaryItemId = salaryItemMap.get(dataKey.toString()); -// if (salaryItemId == null || salaryItemId <= 0) { -// isError = true; + } + } + } else { + Long salaryItemId = salaryItemMap.get(dataKey.toString()); + if (salaryItemId == null || salaryItemId <= 0) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100579, SalaryI18nUtil.getI18nLabel(102840, "本次核算所用账套不包含该薪资项目"))); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102841, "表头错误,本次核算所用账套不包含该薪资项目"), i, i, j, j); -// } else { -// excelSalaryItemIds.add(salaryItemId); -// if (StringUtils.equals("importExcelAcctResult", importType)) { -// ExcelAcctResultPO excelAcctResult = ExcelAcctResultPO.builder() + } else { + excelSalaryItemIds.add(salaryItemId); + if (StringUtils.equals("importExcelAcctResult", importType)) { + ExcelAcctResultPO excelAcctResult = ExcelAcctResultPO.builder() // .id(IdGenerator.generate()) -// .salaryAcctRecordId(salaryAcctRecordPO.getId()) -// .salarySobId(salaryAcctRecordPO.getSalarySobId()) -// .salaryItemId(salaryItemId) -// .resultValue(dataValue) -// .creator(currentEmployeeId) -// .createTime(now) -// .updateTime(now) -// .deleteType(0) -// .tenantKey(tenantKey) -// .build(); -// excelAcctResultsOfOneEmp.add(excelAcctResult); -// } -// if (StringUtils.equals("importSalaryAcctResult", importType)) { -// SalaryAcctResultPO salaryAcctResult = SalaryAcctResultPO.builder() + .salaryAcctRecordId(salaryAcctRecordPO.getId()) + .salarySobId(salaryAcctRecordPO.getSalarySobId()) + .salaryItemId(salaryItemId) + .resultValue(dataValue) + .creator(currentEmployeeId) + .createTime(now) + .updateTime(now) + .deleteType(0) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build(); + excelAcctResultsOfOneEmp.add(excelAcctResult); + } + if (StringUtils.equals("importSalaryAcctResult", importType)) { + SalaryAcctResultPO salaryAcctResult = SalaryAcctResultPO.builder() // .id(IdGenerator.generate()) -// .salaryAcctRecordId(salaryAcctRecordPO.getId()) -// .salarySobId(salaryAcctRecordPO.getSalarySobId()) -// .salaryItemId(salaryItemId) -// .resultValue(dataValue) -// .creator(currentEmployeeId) -// .createTime(now) -// .updateTime(now) -// .deleteType(0) -// .tenantKey(tenantKey) -// .build(); -// salaryAcctResultsOfOneEmp.add(salaryAcctResult); -// } -// } -// } -// // (如果是线下对比)如果个税扣缴义务人+人员目前不在核算人员里面,不支持导入 -// if (StringUtils.equals("importExcelAcctResult", importType) -// && (employeeId != null && employeeId > 0) -// && (taxAgentId != null && taxAgentId > 0) -// && i == data.size() - 1 -// && !salaryAcctEmployeeMap.containsKey(employeeId + "-" + taxAgentId)) { -// isError = true; + .salaryAcctRecordId(salaryAcctRecordPO.getId()) + .salarySobId(salaryAcctRecordPO.getSalarySobId()) + .salaryItemId(salaryItemId) + .resultValue(dataValue) + .creator(currentEmployeeId) + .createTime(now) + .updateTime(now) + .deleteType(0) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build(); + salaryAcctResultsOfOneEmp.add(salaryAcctResult); + } + } + } + // (如果是线下对比)如果个税扣缴义务人+人员目前不在核算人员里面,不支持导入 + if (StringUtils.equals("importExcelAcctResult", importType) + && (employeeId != null && employeeId > 0) + && (taxAgentId != null && taxAgentId > 0) + && i == data.size() - 1 + && !salaryAcctEmployeeMap.containsKey(employeeId + "-" + taxAgentId)) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100579, SalaryI18nUtil.getI18nLabel(102840, "本次薪资核算不包含该人员"))); + excelComments.add(errorMessageMap); // salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102842, "本次薪资核算不包含该人员"), i, i, usernameIndex, usernameIndex); -// } -// } -// // 每处理50个数据更新一次进度 -// index++; + } + } + // 每处理50个数据更新一次进度 + index++; // if (index % 50 == 0 || index >= total) { // salaryBatchService.sendImportRate(message.getBizId(), total, index); // } -// if (isError) { -// failCount++; -// errorDatas.add(map); -// continue; -// } -// SalaryAcctEmployeePO salaryAcctEmployee = salaryAcctEmployeeMap.get(employeeId + "-" + taxAgentId); -// Long salaryAcctEmpId = Optional.ofNullable(salaryAcctEmployee).map(SalaryAcctEmployeePO::getId).orElse(0L); -// if (StringUtils.equals("importExcelAcctResult", importType)) { -// for (ExcelAcctResultPO excelAcctResultPO : excelAcctResultsOfOneEmp) { -// excelAcctResultPO.setEmployeeId(employeeId); -// excelAcctResultPO.setTaxAgentId(taxAgentId); -// excelAcctResultPO.setSalaryAcctEmpId(salaryAcctEmpId); -// } -// excelAcctResults.addAll(excelAcctResultsOfOneEmp); -// } -// if (StringUtils.equals("importSalaryAcctResult", importType)) { -// if (salaryAcctEmpId <= 0) { -// SalaryAcctEmployeePO acctEmployee = SalaryAcctEmployeePO.builder() + if (isError) { + failCount++; + errorDatas.add(map); + continue; + } + SalaryAcctEmployeePO salaryAcctEmployee = salaryAcctEmployeeMap.get(employeeId + "-" + taxAgentId); + Long salaryAcctEmpId = Optional.ofNullable(salaryAcctEmployee).map(SalaryAcctEmployeePO::getId).orElse(0L); + if (StringUtils.equals("importExcelAcctResult", importType)) { + for (ExcelAcctResultPO excelAcctResultPO : excelAcctResultsOfOneEmp) { + excelAcctResultPO.setEmployeeId(employeeId); + excelAcctResultPO.setTaxAgentId(taxAgentId); + excelAcctResultPO.setSalaryAcctEmpId(salaryAcctEmpId); + } + excelAcctResults.addAll(excelAcctResultsOfOneEmp); + } + if (StringUtils.equals("importSalaryAcctResult", importType)) { + if (salaryAcctEmpId <= 0) { + SalaryAcctEmployeePO acctEmployee = SalaryAcctEmployeePO.builder() // .id(IdGenerator.generate()) -// .employeeId(employeeId) -// .salaryAcctRecordId(salaryAcctRecordId) -// .salarySobId(salaryAcctRecordPO.getSalarySobId()) -// .salaryMonth(salaryAcctRecordPO.getSalaryMonth()) -// .taxAgentId(taxAgentId) -// .creator(currentEmployeeId) -// .createTime(now) -// .updateTime(now) -// .deleteType(0) -// .tenantKey(tenantKey) -// .build(); -// newSalaryAcctEmployees.add(acctEmployee); -// salaryAcctEmpId = acctEmployee.getId(); -// } -// for (SalaryAcctResultPO salaryAcctResultPO : salaryAcctResultsOfOneEmp) { -// salaryAcctResultPO.setEmployeeId(employeeId); -// salaryAcctResultPO.setTaxAgentId(taxAgentId); -// salaryAcctResultPO.setSalaryAcctEmpId(salaryAcctEmpId); -// } -// salaryAcctEmpIds.add(salaryAcctEmpId); -// salaryAcctResults.addAll(salaryAcctResultsOfOneEmp); -// } -// successCount++; -// } -// // 如果sheet包含错误数据 + .employeeId(employeeId) + .salaryAcctRecordId(salaryAcctRecordId) + .salarySobId(salaryAcctRecordPO.getSalarySobId()) + .salaryMonth(salaryAcctRecordPO.getSalaryMonth()) + .taxAgentId(taxAgentId) + .creator(currentEmployeeId) + .createTime(now) + .updateTime(now) + .deleteType(0) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build(); + newSalaryAcctEmployees.add(acctEmployee); + salaryAcctEmpId = acctEmployee.getId(); + } + for (SalaryAcctResultPO salaryAcctResultPO : salaryAcctResultsOfOneEmp) { + salaryAcctResultPO.setEmployeeId(employeeId); + salaryAcctResultPO.setTaxAgentId(taxAgentId); + salaryAcctResultPO.setSalaryAcctEmpId(salaryAcctEmpId); + } + salaryAcctEmpIds.add(salaryAcctEmpId); + salaryAcctResults.addAll(salaryAcctResultsOfOneEmp); + } + successCount++; + } + // 如果sheet包含错误数据 // if (CollectionUtils.isNotEmpty(errorDatas)) { // salaryBatchService.createErrorExcelSheet(headers, errorDatas, excelSheet.getName(), excelComments, errorExcelSheets); // } -// if (StringUtils.equals("importExcelAcctResult", importType)) { -// getSalaryComparisonResultService(user).deleteBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecordId)); -// if (CollectionUtils.isNotEmpty(excelAcctResults)) { -// getSalaryComparisonResultService(user).batchSave(excelAcctResults); -// } -// } -// if (StringUtils.equals("importSalaryAcctResult", importType)) { -// if (CollectionUtils.isNotEmpty(salaryAcctEmpIds)) { -// getSalaryAcctResultService(user).deleteByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, excelSalaryItemIds); -// } -// if (CollectionUtils.isNotEmpty(salaryAcctResults)) { -// getSalaryAcctResultService(user).batchSave(salaryAcctResults); -// } -// if (CollectionUtils.isNotEmpty(newSalaryAcctEmployees)) { -// getSalaryAcctEmployeeService(user).batchSave(newSalaryAcctEmployees); -// } -// } -// // 发送导入回调信息 + if (StringUtils.equals("importExcelAcctResult", importType)) { + getSalaryComparisonResultService(user).deleteBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecordId)); + if (CollectionUtils.isNotEmpty(excelAcctResults)) { + getSalaryComparisonResultService(user).batchSave(excelAcctResults); + } + } + if (StringUtils.equals("importSalaryAcctResult", importType)) { + if (CollectionUtils.isNotEmpty(salaryAcctEmpIds)) { + getSalaryAcctResultService(user).deleteByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, excelSalaryItemIds); + } + if (CollectionUtils.isNotEmpty(salaryAcctResults)) { + getSalaryAcctResultService(user).batchSave(salaryAcctResults); + } + if (CollectionUtils.isNotEmpty(newSalaryAcctEmployees)) { + getSalaryAcctEmployeeService(user).batchSave(newSalaryAcctEmployees); + } + } + + + // 发送导入回调信息 // salaryBatchService.sendImportCallBackInfo(message, successCount, failCount, errorExcelSheets); -// } + return null; + } // @Override // public Map exportCheckResult( diff --git a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java index 08c0a0018..884d2adff 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java @@ -8,6 +8,7 @@ import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; @@ -58,7 +59,10 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe return (SalaryAcctEmployeeService) ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user); } - private SalaryAcctResultService salaryAcctResultService; + + private SalaryAcctResultService getSalaryAcctResultService(User user) { + return (SalaryAcctResultService) ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); + } // private SalaryCheckResultService salaryCheckResultService; // @@ -306,7 +310,7 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe //todo 删除薪资核算人员 // getSalaryAcctEmployeeService(user).deleteBySalaryAcctRecordIds(ids); // // 删除薪资核算结果 -// salaryAcctResultService.deleteBySalaryAcctRecordIds(ids); +// getSalaryAcctResultService(user).deleteBySalaryAcctRecordIds(ids); // // 删除校验异常 // salaryCheckResultService.deleteBySalaryAcctRecordIds(ids); // // 删除校验异常明细 @@ -349,11 +353,10 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe // if (CollectionUtils.isNotEmpty(salaryCheckResultPOS)) { // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98784, "核算结果尚未通过校验规则,请确认是否需要忽略校验异常后再归档")); // } - //todo 查询薪资核算结果 -// List salaryAcctResultPOS = salaryAcctResultService.listBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecordId)); -// if (CollectionUtils.isEmpty(salaryAcctResultPOS)) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(99691, "尚未核算,请先核算后再归档")); -// } + List salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecordId)); + if (CollectionUtils.isEmpty(salaryAcctResultPOS)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(99691, "尚未核算,请先核算后再归档")); + } // 更新薪资核算记录的状态 salaryAcctRecordPO.setStatus(SalaryAcctRecordStatusEnum.ARCHIVED.getValue()); salaryAcctRecordPO.setUpdateTime(new Date()); From bef9b30a2ed2ddc3075d28dda21ce3cc5a29f413 Mon Sep 17 00:00:00 2001 From: Chengliang <1546584672@qq.com> Date: Tue, 19 Apr 2022 17:46:24 +0800 Subject: [PATCH 10/14] =?UTF-8?q?=E7=A6=8F=E5=88=A9=E5=8F=B0=E8=B4=A6?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=8F=8A=E5=88=97=E8=A1=A8bug=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 15 ++ .../InsuranceAccountDetailMapper.xml | 199 ++++++++++-------- .../mapper/siarchives/FundSchemeMapper.xml | 22 +- .../mapper/siarchives/OtherSchemeMapper.xml | 20 +- .../mapper/siarchives/SocialSchemeMapper.java | 6 +- .../mapper/siarchives/SocialSchemeMapper.xml | 162 +++++++++++++- .../salary/service/SIArchivesService.java | 24 +++ .../service/impl/SIAccountServiceImpl.java | 19 +- .../service/impl/SIArchivesServiceImpl.java | 64 +++++- .../service/impl/SIExportServiceImpl.java | 2 +- .../engine/salary/web/SIExportController.java | 56 +++++ .../salary/wrapper/SIExportWrapper.java | 13 ++ 12 files changed, 475 insertions(+), 127 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..ddbcd048a --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +/weaver-hrm-salary.iml +/out/ +/.idea/ + +HELP.md +target/ + +### IntelliJ IDEA ### +.idea + +/src/test +/src/META-INF + +/log + diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml index c58e7521b..55342838a 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml @@ -94,7 +94,7 @@ , t.tenant_key - + AND t.bill_month = #{param.billMonth} @@ -103,13 +103,33 @@ AND t.payment_status = #{param.paymentStatus} - - AND t.employee_id IN - - #{employeeId} - + + + + + AND + ( + e.lastname like CONCAT('%',#{param.userName},'%') + ) + + + AND + ( + e.lastname like '%'||#{param.userName}||'%' + ) + + + + + AND + ( + e.lastname like '%'+#{param.userName}+'%' + ) + + + @@ -415,28 +438,28 @@ FROM ( SELECT - e.username AS userName, - e.JOB_NUM AS jobNum, - e.DEPARTMENT AS departmentId, - d.`NAME` AS departmentName, + e.lastname AS userName, + e.jobtitle AS jobNum, + e.departmentid AS departmentId, + d.departmentname AS departmentName, e.`STATUS` AS userStatus, - e.POSITION AS position, + e.jobtitle AS position, h.payment_status AS paymentStatus, - e.HIREDATE AS hiredate, - l.DIMISSION_TIME AS dimissionDate, + e.companystartdate AS hiredate, + l.dismissdate AS dimissionDate, e.ID AS employeeId, e.MOBILE AS telephone FROM hrsa_bill_detail h - LEFT JOIN {$publicdb}.employee e ON e.ID = h.employee_id AND h.delete_type = 0 - LEFT JOIN {$publicdb}.dimission_log l ON e.ID = l.DIMISSION_ID - LEFT JOIN {$publicdb}.department d ON d.ID = e.DEPARTMENT + LEFT JOIN hrmresource e ON e.ID = h.employee_id AND h.delete_type = 0 + LEFT JOIN bill_hrmdismiss l ON e.ID = l.resource_n + LEFT JOIN hrmdepartment d ON d.ID = e.departmentid WHERE - e.`STATUS` = 'unavailable' AND h.payment_status = 0 + e.`STATUS` = 5 AND h.payment_status = 0 - AND e.username like CONCAT('%',#{userName},'%') + AND e.lastname like CONCAT('%',#{userName},'%') - AND(l.DIMISSION_TIME IS NOT NULL) + AND(l.dismissdate IS NOT NULL) )AS t LEFT JOIN hrsa_social_archives social ON t.employeeId = social.employee_id AND social.delete_type = 0 LEFT JOIN hrsa_fund_archives fund ON t.employeeId = fund.employee_id AND fund.delete_type = 0 @@ -494,27 +517,27 @@ FROM ( SELECT - e.username AS userName, - e.JOB_NUM AS jobNum, - e.DEPARTMENT AS departmentId, - d.`NAME` AS departmentName, + e.lastname AS userName, + e.jobtitle AS jobNum, + e.departmentid AS departmentId, + d.departmentname AS departmentName, e.`STATUS` AS userStatus, - e.POSITION AS position, - e.HIREDATE AS hiredate, - l.DIMISSION_TIME AS dimissionDate, + e.jobtitle AS position, + e.companystartdate AS hiredate, + l.dismissdate AS dimissionDate, e.ID AS employeeId, e.MOBILE AS telephone FROM - {$publicdb}.employee e - LEFT JOIN {$publicdb}.dimission_log l ON e.ID = l.DIMISSION_ID - LEFT JOIN {$publicdb}.department d ON d.ID = e.DEPARTMENT + hrmresource e + LEFT JOIN bill_hrmdismiss l ON e.ID = l.resource_n + LEFT JOIN hrmdepartment d ON d.ID = e.departmentid WHERE - e.`STATUS` = 'normal' + e.`STATUS` not in (4,5,6,7) - AND e.username like CONCAT('%',#{userName},'%') + AND e.lastname like CONCAT('%',#{userName},'%') AND( - l.DIMISSION_TIME IS NULL OR l.DIMISSION_TIME = '' + l.dismissdate IS NULL OR l.dismissdate = '' ) )AS t LEFT JOIN hrsa_social_archives social ON t.employeeId = social.employee_id AND social.delete_type = 0 @@ -584,28 +607,28 @@ FROM ( SELECT - e.username AS userName, - e.JOB_NUM AS jobNum, - e.DEPARTMENT AS departmentId, - d.NAME AS departmentName, - e.STATUS AS userStatus, - e.POSITION AS position, + e.lastname AS userName, + e.jobtitle AS jobNum, + e.departmentid AS departmentId, + d.departmentname AS departmentName, + e.`STATUS` AS userStatus, + e.jobtitle AS position, h.payment_status AS paymentStatus, - e.HIREDATE AS hiredate, - l.DIMISSION_TIME AS dimissionDate, + e.companystartdate AS hiredate, + l.dismissdate AS dimissionDate, e.ID AS employeeId, e.MOBILE AS telephone FROM hrsa_bill_detail h - LEFT JOIN {$publicdb}.employee e ON e.ID = h.employee_id AND h.delete_type = 0 - LEFT JOIN {$publicdb}.dimission_log l ON e.ID = l.DIMISSION_ID - LEFT JOIN {$publicdb}.department d ON d.ID = e.DEPARTMENT + LEFT JOIN hrmresource e ON e.ID = h.employee_id AND h.delete_type = 0 + LEFT JOIN bill_hrmdismiss l ON e.ID = l.resource_n + LEFT JOIN hrmdepartment d ON d.ID = e.departmentid WHERE - e.STATUS = 'unavailable' AND h.payment_status = 0 + e.STATUS = 5 AND h.payment_status = 0 - AND e.username like '%'||#{userName}||'%' + AND e.lastname like '%'||#{userName}||'%' - AND(l.DIMISSION_TIME IS NOT NULL) + AND(l.dismissdate IS NOT NULL) )AS t LEFT JOIN hrsa_social_archives social ON t.employeeId = social.employee_id AND social.delete_type = 0 LEFT JOIN hrsa_fund_archives fund ON t.employeeId = fund.employee_id AND fund.delete_type = 0 @@ -663,27 +686,27 @@ FROM ( SELECT - e.username AS userName, - e.JOB_NUM AS jobNum, - e.DEPARTMENT AS departmentId, - d.NAME AS departmentName, - e.STATUS AS userStatus, - e.POSITION AS position, - e.HIREDATE AS hiredate, - l.DIMISSION_TIME AS dimissionDate, + e.lastname AS userName, + e.jobtitle AS jobNum, + e.departmentid AS departmentId, + d.departmentname AS departmentName, + e.`STATUS` AS userStatus, + e.jobtitle AS position, + e.companystartdate AS hiredate, + l.dismissdate AS dimissionDate, e.ID AS employeeId, e.MOBILE AS telephone FROM - {$publicdb}.employee e - LEFT JOIN {$publicdb}.dimission_log l ON e.ID = l.DIMISSION_ID - LEFT JOIN {$publicdb}.department d ON d.ID = e.DEPARTMENT + hrmresource e + LEFT JOIN bill_hrmdismiss l ON e.ID = l.resource_n + LEFT JOIN hrmdepartment d ON d.ID = e.departmentid WHERE - e.STATUS = 'normal' + e.STATUS not in (4,5,6,7) - AND e.username like '%'||#{userName}||'%' + AND e.lastname like '%'||#{userName}||'%' AND( - l.DIMISSION_TIME IS NULL OR l.DIMISSION_TIME = '' + l.dismissdate IS NULL OR l.dismissdate = '' ) )AS t LEFT JOIN hrsa_social_archives social ON t.employeeId = social.employee_id AND social.delete_type = 0 @@ -754,28 +777,28 @@ FROM ( SELECT - e.username AS userName, - e.JOB_NUM AS jobNum, - e.DEPARTMENT AS departmentId, - d.NAME AS departmentName, - e.STATUS AS userStatus, - e.POSITION AS position, + e.lastname AS userName, + e.jobtitle AS jobNum, + e.departmentid AS departmentId, + d.departmentname AS departmentName, + e.`STATUS` AS userStatus, + e.jobtitle AS position, h.payment_status AS paymentStatus, - e.HIREDATE AS hiredate, - l.DIMISSION_TIME AS dimissionDate, + e.companystartdate AS hiredate, + l.dismissdate AS dimissionDate, e.ID AS employeeId, e.MOBILE AS telephone FROM hrsa_bill_detail h - LEFT JOIN {$publicdb}.employee e ON e.ID = h.employee_id AND h.delete_type = 0 - LEFT JOIN {$publicdb}.dimission_log l ON e.ID = l.DIMISSION_ID - LEFT JOIN {$publicdb}.department d ON d.ID = e.DEPARTMENT + LEFT JOIN hrmresource e ON e.ID = h.employee_id AND h.delete_type = 0 + LEFT JOIN bill_hrmdismiss l ON e.ID = l.resource_n + LEFT JOIN hrmdepartment d ON d.ID = e.departmentid WHERE - e.STATUS = 'unavailable' AND h.payment_status = 0 + e.STATUS = '5' AND h.payment_status = 0 - AND e.username like '%'+#{userName}+'%' + AND e.lastname like '%'+#{userName}+'%' - AND(l.DIMISSION_TIME IS NOT NULL) + AND(l.dismissdate IS NOT NULL) )AS t LEFT JOIN hrsa_social_archives social ON t.employeeId = social.employee_id AND social.delete_type = 0 LEFT JOIN hrsa_fund_archives fund ON t.employeeId = fund.employee_id AND fund.delete_type = 0 @@ -833,27 +856,27 @@ FROM ( SELECT - e.username AS userName, - e.JOB_NUM AS jobNum, - e.DEPARTMENT AS departmentId, - d.NAME AS departmentName, - e.STATUS AS userStatus, - e.POSITION AS position, - e.HIREDATE AS hiredate, - l.DIMISSION_TIME AS dimissionDate, + e.lastname AS userName, + e.jobtitle AS jobNum, + e.departmentid AS departmentId, + d.departmentname AS departmentName, + e.`STATUS` AS userStatus, + e.jobtitle AS position, + e.companystartdate AS hiredate, + l.dismissdate AS dimissionDate, e.ID AS employeeId, e.MOBILE AS telephone FROM - {$publicdb}.employee e - LEFT JOIN {$publicdb}.dimission_log l ON e.ID = l.DIMISSION_ID - LEFT JOIN {$publicdb}.department d ON d.ID = e.DEPARTMENT + hrmresource e + LEFT JOIN bill_hrmdismiss l ON e.ID = l.resource_n + LEFT JOIN hrmdepartment d ON d.ID = e.departmentid WHERE - e.STATUS = 'normal' + e.STATUS not in (4,5,6,7) - AND e.username like '%'+#{userName}+'%' + AND e.lastname like '%'+#{userName}+'%' AND( - l.DIMISSION_TIME IS NULL OR l.DIMISSION_TIME = '' + l.dismissdate IS NULL OR l.dismissdate = '' ) )AS t LEFT JOIN hrsa_social_archives social ON t.employeeId = social.employee_id AND social.delete_type = 0 diff --git a/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml b/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml index 30f6cc512..310db4225 100644 --- a/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml +++ b/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml @@ -49,10 +49,13 @@ FROM hrsa_fund_archives t WHERE delete_type = 0 - AND employee_id IN - - #{employeeIds} - + + AND employee_id IN + + #{employeeId} + + + @@ -60,10 +63,13 @@ UPDATE hrsa_fund_archives SET delete_type = 1 WHERE delete_type = 0 - AND employee_id IN - - #{employeeIds} - + + AND employee_id IN + + #{employeeId} + + + diff --git a/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.xml b/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.xml index e30a30ff8..09b1f6fa0 100644 --- a/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.xml +++ b/src/com/engine/salary/mapper/siarchives/OtherSchemeMapper.xml @@ -45,10 +45,13 @@ FROM hrsa_other_archives t WHERE delete_type = 0 - AND employee_id IN - - #{employeeIds} - + + AND employee_id IN + + #{employeeId} + + + @@ -58,9 +61,12 @@ SET delete_type = 1 WHERE delete_type = 0 AND employee_id IN - - #{employeeIds} - + + + #{employeeId} + + + diff --git a/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.java b/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.java index ff844327a..2c5d09126 100644 --- a/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.java +++ b/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.java @@ -36,7 +36,7 @@ public interface SocialSchemeMapper { void batchSave(@Param("socialSchemePOS") List singletonList); /** - * + * 人员档案信息 * @param param * @return */ @@ -47,4 +47,8 @@ public interface SocialSchemeMapper { * @return */ List tips(); + + + List queryEmployeeList(@Param("param") InsuranceArchivesListParam param); + } diff --git a/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.xml b/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.xml index 82336e375..b745a1bb3 100644 --- a/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.xml +++ b/src/com/engine/salary/mapper/siarchives/SocialSchemeMapper.xml @@ -47,10 +47,12 @@ FROM hrsa_social_archives t WHERE delete_type = 0 - AND employee_id IN - - #{employeeIds} - + + AND employee_id IN + + #{employeeId} + + @@ -58,10 +60,12 @@ UPDATE hrsa_social_archives SET delete_type = 1 WHERE delete_type = 0 - AND employee_id IN - - #{employeeIds} - + + AND employee_id IN + + #{employeeId} + + @@ -285,4 +289,146 @@ social_start_time is not null and social_end_time is null + + + + + + AND + ( + userName like CONCAT('%',#{param.keyword},'%') + OR jobNum = #{param.keyword} + ) + + + AND userName like CONCAT('%',#{param.userName},'%') + + + AND jobNum = #{param.jobNum} + + + AND departmentId IN + + #{departmentId} + + + + AND userStatus IN + + #{userStatus} + + + + AND position IN + + #{position} + + + + AND hiredate > #{param.hiredateStart} + + + AND hiredate < #{param.hiredateEnd} + + + AND dimissionDate > #{param.dimissionDateStart} + + + AND dimissionDate < #{param.dimissionDateEnd} + + + AND siSchemeId = #{param.siSchemeId} + + + AND fundSchemeId = #{param.fundSchemeId} + + + AND otherSchemeId = #{param.otherSchemeId} + + + AND employeeId IN + + #{item} + + + + \ No newline at end of file diff --git a/src/com/engine/salary/service/SIArchivesService.java b/src/com/engine/salary/service/SIArchivesService.java index ee144f651..c9aac6447 100644 --- a/src/com/engine/salary/service/SIArchivesService.java +++ b/src/com/engine/salary/service/SIArchivesService.java @@ -2,7 +2,10 @@ package com.engine.salary.service; import com.engine.salary.entity.siarchives.param.InsuranceArchivesListParam; import com.engine.salary.entity.siarchives.param.InsuranceArchivesSaveParam; +import com.engine.salary.entity.siarchives.po.InsuranceArchivesEmployeePO; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import java.util.List; import java.util.Map; /** @@ -24,4 +27,25 @@ public interface SIArchivesService { Map listPage(InsuranceArchivesListParam insuranceArchivesListParam); Map getSearchCondition(Map stringObjectMap); + + /** + * 根据高级搜索框或者员工id集合导出档案 + * + * @param param 请求报文 + * @return map + */ + XSSFWorkbook export(InsuranceArchivesListParam param); + + + /** + * 获取员工的基本信息 + *

+ * 此处主要是一个公共接口,有多处引用。我们薪资系统只保存员工id(employeeId), + * 但是页面上需要展示员工的更多信息(姓名,部门,状态。。。), + * 所以这里主要是用于接收联表数据的一个接口 + * + * @param param 高级搜索条件,用于过滤数据 + * @return list + */ + List listPageEmployeePOS(InsuranceArchivesListParam param); } diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 8300e1258..b63b9ae40 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -11,8 +11,6 @@ import com.engine.salary.biz.SIAccountBiz; import com.engine.salary.biz.SIArchivesBiz; import com.engine.salary.component.SalaryWeaTable; import com.engine.salary.constant.SalaryDefaultTenantConstant; -import com.engine.salary.entity.datacollection.DataCollectionEmployee; -import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO; import com.engine.salary.entity.siaccount.bo.InsuranceAccountBO; import com.engine.salary.entity.siaccount.dto.InsuranceAccountBatchListDTO; import com.engine.salary.entity.siaccount.dto.InsuranceAccountTabDTO; @@ -162,6 +160,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { List weaTableColumn = getColumnBuildService(user).buildCommonColumnsWithStyle(insuranceAccountDetailPOS, employeeId, SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY, false); WeaTable table = new WeaTable(); + table.setPageUID(UUID.randomUUID().toString()); table.setColumns(weaTableColumn); List columns = weaTableColumn.stream().map(v -> new Column(v.getText(), v.getColumn(), v.getColumn())).collect(Collectors.toList()); pageInfos.setColumns(columns); @@ -172,7 +171,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { result.success(); datas.put("pageInfo", pageInfos); - datas.put("dataKey",result.getResultMap()); + //datas.put("dataKey",result.getResultMap()); return datas; } @@ -183,9 +182,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { public Map listCommonPageByName(InsuranceAccountDetailParam queryParam) { //增加查询参数userName if (StringUtils.isNotBlank(queryParam.getUserName())) { - List employeeIdsByUserName = MapperProxyFactory.getProxy(EmployMapper.class).getEmployeeIdsByUserName(queryParam.getUserName()); - List employeeIds = employeeIdsByUserName.stream().map(DataCollectionEmployee::getEmployeeId).collect(Collectors.toList()); - queryParam.setEmployeeIds(employeeIds); + queryParam.setUserName(queryParam.getUserName()); } return listCommonPage(queryParam); } @@ -215,6 +212,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { SalaryWeaTable table = new SalaryWeaTable<>(user, InsuranceAccountDetailPO.class); table.setColumns(weaTableColumn); + List columns = weaTableColumn.stream().map(v -> new Column(v.getText(), v.getColumn(), v.getColumn())).collect(Collectors.toList()); + pageInfos.setColumns(columns); WeaResultMsg result = new WeaResultMsg(false); @@ -222,7 +221,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { result.success(); datas.put("pageInfo", pageInfos); - datas.put("dataKey",result.getResultMap()); + //datas.put("dataKey",result.getResultMap()); return datas; } @@ -232,9 +231,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { public Map supplementaryByNameList(InsuranceAccountDetailParam queryParam) { //增加查询参数userName if (StringUtils.isNotBlank(queryParam.getUserName())) { - List employeeIdsByUserName = MapperProxyFactory.getProxy(EmployMapper.class).getEmployeeIdsByUserName(queryParam.getUserName()); - List employeeIds = employeeIdsByUserName.stream().map(DataCollectionEmployee::getEmployeeId).collect(Collectors.toList()); - queryParam.setEmployeeIds(employeeIds); + queryParam.setUserName(queryParam.getUserName()); } return listSupplementaryPage(queryParam); } @@ -570,8 +567,6 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { @Override public PageInfo overView(InsuranceAccountDetailParam queryParam) { PageInfo pageInfos = siAccountBiz.overView(queryParam); - pageInfos.setPageNum(queryParam.getCurrent()); - pageInfos.setPageSize(queryParam.getPageSize()); return pageInfos; } diff --git a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java index 6a441c088..99eb40f24 100644 --- a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java @@ -1,16 +1,22 @@ package com.engine.salary.service.impl; +import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.engine.core.impl.Service; import com.engine.salary.biz.SIArchivesBiz; import com.engine.salary.cmd.siarchives.SIArchivesTipsCmd; import com.engine.salary.entity.siarchives.param.InsuranceArchivesListParam; import com.engine.salary.entity.siarchives.param.InsuranceArchivesSaveParam; +import com.engine.salary.entity.siarchives.po.InsuranceArchivesEmployeePO; import com.engine.salary.enums.sicategory.WelfareTypeEnum; +import com.engine.salary.mapper.siarchives.SocialSchemeMapper; import com.engine.salary.service.SIArchivesService; +import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.MapperProxyFactory; +import com.engine.salary.util.excel.ExcelUtil; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.general.Util; -import java.util.HashMap; -import java.util.Map; +import java.util.*; /** * @Author weaver_cl @@ -20,6 +26,8 @@ import java.util.Map; **/ public class SIArchivesServiceImpl extends Service implements SIArchivesService { + private SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); + @Override public Map getTips(Map params) { return commandExecutor.execute(new SIArchivesTipsCmd(params,user)); @@ -70,5 +78,57 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService return apidatas; } + @Override + public XSSFWorkbook export(InsuranceArchivesListParam param) { + InsuranceArchivesListParam request = InsuranceArchivesListParam.builder().build(); + if (param.getHireDate() != null && param.getHireDate().length == 2) { + param.setHiredateStart(param.getHireDate()[0]); + param.setHiredateEnd(param.getHireDate()[1]); + } + if (param.getDimissionDate() != null && param.getDimissionDate().length == 2) { + param.setDimissionDateStart(param.getDimissionDate()[0]); + param.setDimissionDateEnd(param.getDimissionDate()[1]); + } + if (Objects.equals("fromQuickSearch", param.getDataSource())) { + request.setStatuses(param.getStatuses()); + request.setKeyword(param.getUserName()); + } else { + request = param; + } + request.setPageSize(null); + request.setStartNum(null); + List insuranceArchivesEmployeePOS = listPageEmployeePOS(request); + if (insuranceArchivesEmployeePOS == null) { + insuranceArchivesEmployeePOS = new ArrayList<>(); + } + List> records = siArchivesBiz.buildTableData(insuranceArchivesEmployeePOS); + List columns = siArchivesBiz.buildWeaTableColumns(insuranceArchivesEmployeePOS,user.getUID()); + + //工作簿list + List> excelSheetData = new ArrayList<>(); + + //工作簿名称 + String sheetName = SalaryI18nUtil.getI18nLabel(85368, "社保福利档案"); //表头 + //表头 + excelSheetData.add(Collections.singletonList(columns.stream().map(WeaTableColumn::getText).toArray(String[]::new))); + //工作簿数据 + List> rows = new LinkedList<>(); + for (Map recordData : records) { + List row = new LinkedList<>(); + for (WeaTableColumn column : columns) { + row.add(recordData.get(column.getColumn())); + } + rows.add(row); + } + excelSheetData.addAll(rows); + return ExcelUtil.genWorkbookV2(excelSheetData, sheetName); + + } + + @Override + public List listPageEmployeePOS(InsuranceArchivesListParam param) { + return MapperProxyFactory.getProxy(SocialSchemeMapper.class).listPageEmployeePOS(param); + } + } diff --git a/src/com/engine/salary/service/impl/SIExportServiceImpl.java b/src/com/engine/salary/service/impl/SIExportServiceImpl.java index 02afe47e4..c2a7fd4a6 100644 --- a/src/com/engine/salary/service/impl/SIExportServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIExportServiceImpl.java @@ -112,7 +112,7 @@ public class SIExportServiceImpl extends Service implements SIExportService { List> excelSheetData = new ArrayList<>(); //工作簿名称 String sheetName = SalaryI18nUtil.getI18nLabel(85368, "社保福利档案"); //表头 - excelSheetData.add(Collections.singletonList(columns.stream().map(item -> item.getText()).toArray(String[]::new))); + excelSheetData.add(Collections.singletonList(columns.stream().map(WeaTableColumn::getText).toArray(String[]::new))); //工作簿数据 List> rows = new LinkedList<>(); for (Map recordData : records) { diff --git a/src/com/engine/salary/web/SIExportController.java b/src/com/engine/salary/web/SIExportController.java index 90c11a96e..4eeed12d4 100644 --- a/src/com/engine/salary/web/SIExportController.java +++ b/src/com/engine/salary/web/SIExportController.java @@ -1,6 +1,10 @@ package com.engine.salary.web; import com.engine.common.util.ServiceUtil; +import com.engine.salary.biz.SIAccountBiz; +import com.engine.salary.entity.siaccount.param.InspectAccountParam; +import com.engine.salary.entity.siaccount.po.InsuranceAccountInspectPO; +import com.engine.salary.entity.siarchives.param.InsuranceArchivesListParam; import com.engine.salary.entity.siexport.param.InsuranceExportParam; import com.engine.salary.enums.siaccount.PaymentStatusEnum; import com.engine.salary.service.SIAccountService; @@ -23,6 +27,8 @@ import javax.ws.rs.core.StreamingOutput; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.time.LocalDate; +import java.util.List; +import java.util.stream.Collectors; /** * @Author weaver_cl @@ -40,6 +46,56 @@ public class SIExportController { return ServiceUtil.getService(SIExportWrapper.class,user); } + @POST + @Path("/archives/export") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response export(@Context HttpServletRequest request, @Context HttpServletResponse response, + @RequestBody InsuranceArchivesListParam param) { + User user = HrmUserVarify.getUser(request, response); + XSSFWorkbook workbook = getSIExportWrapper(user).export(param); + String time = LocalDate.now().toString(); + String fileName = "福利档案报表" + time; + try { + fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + StreamingOutput output = outputStream -> { + workbook.write(outputStream); + outputStream.flush(); + }; + response.setContentType("application/octet-stream"); + return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); + } + + @POST + @Path("/archives/exportInspect") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response exportInspect(@Context HttpServletRequest request, @Context HttpServletResponse response, + @RequestBody InspectAccountParam param) { + User user = HrmUserVarify.getUser(request, response); + SIAccountBiz siAccountBiz = new SIAccountBiz(); + List insuranceAccountInspectPOS = siAccountBiz.allInspects(param.getIds(), param.getBillMonth()); + InsuranceArchivesListParam req = new InsuranceArchivesListParam(); + req.setEmployeeIds(insuranceAccountInspectPOS.stream().map(InsuranceAccountInspectPO::getEmployeeId).distinct().collect(Collectors.toList())); + XSSFWorkbook workbook = getSIExportWrapper(user).export(req); + String time = LocalDate.now().toString(); + String fileName = "核算异常人员档案报表" + time; + try { + fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + StreamingOutput output = outputStream -> { + workbook.write(outputStream); + outputStream.flush(); + }; + response.setContentType("application/octet-stream"); + return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); + } + + + @POST @Path("/common/export") diff --git a/src/com/engine/salary/wrapper/SIExportWrapper.java b/src/com/engine/salary/wrapper/SIExportWrapper.java index e808d4baf..f37eb9bf9 100644 --- a/src/com/engine/salary/wrapper/SIExportWrapper.java +++ b/src/com/engine/salary/wrapper/SIExportWrapper.java @@ -2,8 +2,11 @@ package com.engine.salary.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.entity.siarchives.param.InsuranceArchivesListParam; import com.engine.salary.entity.siexport.param.InsuranceExportParam; +import com.engine.salary.service.SIArchivesService; import com.engine.salary.service.SIExportService; +import com.engine.salary.service.impl.SIArchivesServiceImpl; import com.engine.salary.service.impl.SIExportServiceImpl; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.User; @@ -20,6 +23,10 @@ public class SIExportWrapper extends Service { return ServiceUtil.getService(SIExportServiceImpl.class, user); } + public SIArchivesService getSIArchivesService(User user) { + return ServiceUtil.getService(SIArchivesServiceImpl.class, user); + } + public XSSFWorkbook exportOverView(InsuranceExportParam param) { return getSIExportService(user).exportOverView(param); @@ -28,4 +35,10 @@ public class SIExportWrapper extends Service { public XSSFWorkbook exportAccount(Integer paymentStatus, InsuranceExportParam param) { return getSIExportService(user).exportAccount(paymentStatus,param); } + + public XSSFWorkbook export(InsuranceArchivesListParam param) { + return getSIArchivesService(user).export(param); + } + + } From dc008dad5c710b417cf6cbfac9d7fed827a751e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 19 Apr 2022 19:32:09 +0800 Subject: [PATCH 11/14] =?UTF-8?q?=E6=A0=B8=E7=AE=97=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/SalaryAcctExcelService.java | 8 + .../impl/SalaryAcctExcelServiceImpl.java | 412 +++++++++--------- .../impl/SalaryAcctResultServiceImpl.java | 3 + .../salary/web/SalaryAcctController.java | 28 +- 4 files changed, 234 insertions(+), 217 deletions(-) diff --git a/src/com/engine/salary/service/SalaryAcctExcelService.java b/src/com/engine/salary/service/SalaryAcctExcelService.java index 2860c028d..de8c8ecb3 100644 --- a/src/com/engine/salary/service/SalaryAcctExcelService.java +++ b/src/com/engine/salary/service/SalaryAcctExcelService.java @@ -7,6 +7,7 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.util.List; +import java.util.Map; /** * 薪资核算导入导出 @@ -75,6 +76,13 @@ public interface SalaryAcctExcelService { * @return */ XSSFWorkbook exportComparisonResultTemplate(SalaryComparisonResultExportParam exportParam); + + + Map importSalaryAcctResult(SalaryAcctImportParam param); + + + Map importExcelAcctResult(SalaryAcctImportParam param); + // // /** // * 薪资核算结果校验异常导出 diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index d9abbb9b9..6f6ec0a28 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -39,6 +39,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.file.ImageFileManager; import weaver.hrm.User; @@ -419,44 +420,17 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc return ExcelUtil.genWorkbookV2(rows, sheetName); } + public Map importSalaryAcctResult(SalaryAcctImportParam param) { + return batchImport(param, "importSalaryAcctResult"); + } -// -// @BatchImportHandler("importSalaryAcctResult") -// @Transactional(rollbackFor = Exception.class) -// public void importSalaryAcctResult() { -// BatchDocumentMessage message = BatchImportContext.getBatchDocumentMessage(); -// String tenantKey = message.getTenantKey(); -// try { -// // 加密用 -// DSTenantKeyThreadVar.tenantKey.set(tenantKey); -// // 接收到解析的数据 -// batchImport(message, "importSalaryAcctResult"); -// } catch (Exception e) { -// log.error("薪资核算结果导入失败:{}", e.getMessage(), e); -// } finally { -// DSTenantKeyThreadVar.tenantKey.remove(); -// } -// } -// @BatchImportHandler("importExcelAcctResult") -// @Transactional(rollbackFor = Exception.class) -// public void importExcelAcctResult() { -// BatchDocumentMessage message = BatchImportContext.getBatchDocumentMessage(); -// String tenantKey = message.getTenantKey(); -// try { -// // 加密用 -// DSTenantKeyThreadVar.tenantKey.set(tenantKey); -// // 接收到解析的数据 -// batchImport(message, "importExcelAcctResult"); -// } catch (Exception e) { -// log.error("线下核算结果导入失败:{}", e.getMessage(), e); -// } finally { -// // 加密用 -// DSTenantKeyThreadVar.tenantKey.remove(); -// } -// } + public Map importExcelAcctResult(SalaryAcctImportParam param) { + return batchImport(param, "importExcelAcctResult"); + } private Map batchImport(SalaryAcctImportParam param, String importType) { + Map apidatas = new HashMap(); ValidUtil.doValidator(param); Date now = new Date(); @@ -509,205 +483,215 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc List excelAcctResults = Lists.newArrayList(); InputStream fileInputStream = null; - fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); - - Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); + try { - // 错误提示信息 - List excelComments = Lists.newArrayList(); - // 存在错误的那行数据 - List> errorDatas = Lists.newArrayList(); - // 表头 - List headers = ExcelSupport.getSheetHeader(sheet, 0); - ; - // 处理数值 - List> data = ExcelParseHelper.parse2Map(sheet, 1); - if (CollectionUtils.isEmpty(headers)) { - throw new RuntimeException("表头为空"); - } - if (CollectionUtils.isEmpty(data)) { - throw new RuntimeException(""); - } - for (int i = 0; i < data.size(); i++) { - int usernameIndex = 0; - boolean isError = false; - Map map = data.get(i); - Long employeeId = 0L; - Long taxAgentId = 0L; - List salaryAcctResultsOfOneEmp = Lists.newArrayListWithExpectedSize(headers.size() - 1); - List excelAcctResultsOfOneEmp = Lists.newArrayListWithExpectedSize(headers.size() - 1); - for (int j = 0; j < headers.size(); j++) { - String header = headers.get(j); - String dataKey = header; - if (dataKey == null) { - continue; - } - String dataValue = (String) map.getOrDefault(dataKey.toString(), ""); - if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(85429, "姓名"), dataKey.toString())) { - usernameIndex = j; - if (StringUtils.isEmpty(dataValue)) { - isError = true; - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(102838, "姓名不能为空")); - excelComments.add(errorMessageMap); - //salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102838, "姓名不能为空"), i, i, j, j); - } else { - employeeId = salaryEmployeeMap.getOrDefault(dataValue, 0L); - if (employeeId == null || employeeId <= 0) { - isError = true; - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100579, "姓名错误,系统内不存在该姓名")); - excelComments.add(errorMessageMap); -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100579, "姓名错误,系统内不存在该姓名"), i, i, j, j); - } - } - } else if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), dataKey.toString())) { - if (StringUtils.isEmpty(dataValue)) { - isError = true; - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100579, SalaryI18nUtil.getI18nLabel(102839, "个税扣缴义务人不能为空"))); - excelComments.add(errorMessageMap); -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102839, "个税扣缴义务人不能为空"), i, i, j, j); - } else { - taxAgentId = taxAgentNameMap.getOrDefault(dataValue, 0L); - if (taxAgentId == null || taxAgentId <= 0) { - isError = true; - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100579, SalaryI18nUtil.getI18nLabel(102840, "个税扣缴义务人错误,系统内不存在该个税扣缴义务人"))); - excelComments.add(errorMessageMap); -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102840, "个税扣缴义务人错误,系统内不存在该个税扣缴义务人"), i, i, j, j); - } - } - } else { - Long salaryItemId = salaryItemMap.get(dataKey.toString()); - if (salaryItemId == null || salaryItemId <= 0) { - isError = true; - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100579, SalaryI18nUtil.getI18nLabel(102840, "本次核算所用账套不包含该薪资项目"))); - excelComments.add(errorMessageMap); -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102841, "表头错误,本次核算所用账套不包含该薪资项目"), i, i, j, j); - } else { - excelSalaryItemIds.add(salaryItemId); - if (StringUtils.equals("importExcelAcctResult", importType)) { - ExcelAcctResultPO excelAcctResult = ExcelAcctResultPO.builder() -// .id(IdGenerator.generate()) - .salaryAcctRecordId(salaryAcctRecordPO.getId()) - .salarySobId(salaryAcctRecordPO.getSalarySobId()) - .salaryItemId(salaryItemId) - .resultValue(dataValue) - .creator(currentEmployeeId) - .createTime(now) - .updateTime(now) - .deleteType(0) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .build(); - excelAcctResultsOfOneEmp.add(excelAcctResult); - } - if (StringUtils.equals("importSalaryAcctResult", importType)) { - SalaryAcctResultPO salaryAcctResult = SalaryAcctResultPO.builder() -// .id(IdGenerator.generate()) - .salaryAcctRecordId(salaryAcctRecordPO.getId()) - .salarySobId(salaryAcctRecordPO.getSalarySobId()) - .salaryItemId(salaryItemId) - .resultValue(dataValue) - .creator(currentEmployeeId) - .createTime(now) - .updateTime(now) - .deleteType(0) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .build(); - salaryAcctResultsOfOneEmp.add(salaryAcctResult); - } - } - } - // (如果是线下对比)如果个税扣缴义务人+人员目前不在核算人员里面,不支持导入 - if (StringUtils.equals("importExcelAcctResult", importType) - && (employeeId != null && employeeId > 0) - && (taxAgentId != null && taxAgentId > 0) - && i == data.size() - 1 - && !salaryAcctEmployeeMap.containsKey(employeeId + "-" + taxAgentId)) { - isError = true; - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100579, SalaryI18nUtil.getI18nLabel(102840, "本次薪资核算不包含该人员"))); - excelComments.add(errorMessageMap); -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102842, "本次薪资核算不包含该人员"), i, i, usernameIndex, usernameIndex); - } + fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); + + Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); + + + // 错误提示信息 + List excelComments = Lists.newArrayList(); + // 存在错误的那行数据 + List> errorDatas = Lists.newArrayList(); + // 表头 + List headers = ExcelSupport.getSheetHeader(sheet, 0); + + // 处理数值 + List> data = ExcelParseHelper.parse2Map(sheet, 1); + if (CollectionUtils.isEmpty(headers)) { + throw new RuntimeException("表头为空"); } - // 每处理50个数据更新一次进度 - index++; + if (CollectionUtils.isEmpty(data)) { + throw new RuntimeException("无数据"); + } + for (int i = 0; i < data.size(); i++) { + int usernameIndex = 0; + boolean isError = false; + Map map = data.get(i); + Long employeeId = 0L; + Long taxAgentId = 0L; + List salaryAcctResultsOfOneEmp = Lists.newArrayListWithExpectedSize(headers.size() - 1); + List excelAcctResultsOfOneEmp = Lists.newArrayListWithExpectedSize(headers.size() - 1); + for (int j = 0; j < headers.size(); j++) { + String header = headers.get(j); + String dataKey = header; + if (dataKey == null) { + continue; + } + String dataValue = (String) map.getOrDefault(dataKey.toString(), ""); + if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(85429, "姓名"), dataKey.toString())) { + usernameIndex = j; + if (StringUtils.isEmpty(dataValue)) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(102838, "姓名不能为空")); + excelComments.add(errorMessageMap); + //salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102838, "姓名不能为空"), i, i, j, j); + } else { + employeeId = salaryEmployeeMap.getOrDefault(dataValue, 0L); + if (employeeId == null || employeeId <= 0) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100579, "姓名错误,系统内不存在该姓名")); + excelComments.add(errorMessageMap); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100579, "姓名错误,系统内不存在该姓名"), i, i, j, j); + } + } + } else if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), dataKey.toString())) { + if (StringUtils.isEmpty(dataValue)) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100579, SalaryI18nUtil.getI18nLabel(102839, "个税扣缴义务人不能为空"))); + excelComments.add(errorMessageMap); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102839, "个税扣缴义务人不能为空"), i, i, j, j); + } else { + taxAgentId = taxAgentNameMap.getOrDefault(dataValue, 0L); + if (taxAgentId == null || taxAgentId <= 0) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100579, SalaryI18nUtil.getI18nLabel(102840, "个税扣缴义务人错误,系统内不存在该个税扣缴义务人"))); + excelComments.add(errorMessageMap); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102840, "个税扣缴义务人错误,系统内不存在该个税扣缴义务人"), i, i, j, j); + } + } + } else { + Long salaryItemId = salaryItemMap.get(dataKey.toString()); + if (salaryItemId == null || salaryItemId <= 0) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100579, SalaryI18nUtil.getI18nLabel(102840, "本次核算所用账套不包含该薪资项目"))); + excelComments.add(errorMessageMap); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102841, "表头错误,本次核算所用账套不包含该薪资项目"), i, i, j, j); + } else { + excelSalaryItemIds.add(salaryItemId); + if (StringUtils.equals("importExcelAcctResult", importType)) { + ExcelAcctResultPO excelAcctResult = ExcelAcctResultPO.builder() +// .id(IdGenerator.generate()) + .salaryAcctRecordId(salaryAcctRecordPO.getId()) + .salarySobId(salaryAcctRecordPO.getSalarySobId()) + .salaryItemId(salaryItemId) + .resultValue(dataValue) + .creator(currentEmployeeId) + .createTime(now) + .updateTime(now) + .deleteType(0) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build(); + excelAcctResultsOfOneEmp.add(excelAcctResult); + } + if (StringUtils.equals("importSalaryAcctResult", importType)) { + SalaryAcctResultPO salaryAcctResult = SalaryAcctResultPO.builder() +// .id(IdGenerator.generate()) + .salaryAcctRecordId(salaryAcctRecordPO.getId()) + .salarySobId(salaryAcctRecordPO.getSalarySobId()) + .salaryItemId(salaryItemId) + .resultValue(dataValue) + .creator(currentEmployeeId) + .createTime(now) + .updateTime(now) + .deleteType(0) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build(); + salaryAcctResultsOfOneEmp.add(salaryAcctResult); + } + } + } + // (如果是线下对比)如果个税扣缴义务人+人员目前不在核算人员里面,不支持导入 + if (StringUtils.equals("importExcelAcctResult", importType) + && (employeeId != null && employeeId > 0) + && (taxAgentId != null && taxAgentId > 0) + && i == data.size() - 1 + && !salaryAcctEmployeeMap.containsKey(employeeId + "-" + taxAgentId)) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", SalaryI18nUtil.getI18nLabel(100579, SalaryI18nUtil.getI18nLabel(102840, "本次薪资核算不包含该人员"))); + excelComments.add(errorMessageMap); +// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102842, "本次薪资核算不包含该人员"), i, i, usernameIndex, usernameIndex); + } + } + // 每处理50个数据更新一次进度 + index++; // if (index % 50 == 0 || index >= total) { // salaryBatchService.sendImportRate(message.getBizId(), total, index); // } - if (isError) { - failCount++; - errorDatas.add(map); - continue; - } - SalaryAcctEmployeePO salaryAcctEmployee = salaryAcctEmployeeMap.get(employeeId + "-" + taxAgentId); - Long salaryAcctEmpId = Optional.ofNullable(salaryAcctEmployee).map(SalaryAcctEmployeePO::getId).orElse(0L); - if (StringUtils.equals("importExcelAcctResult", importType)) { - for (ExcelAcctResultPO excelAcctResultPO : excelAcctResultsOfOneEmp) { - excelAcctResultPO.setEmployeeId(employeeId); - excelAcctResultPO.setTaxAgentId(taxAgentId); - excelAcctResultPO.setSalaryAcctEmpId(salaryAcctEmpId); + if (isError) { + failCount++; + errorDatas.add(map); + continue; } - excelAcctResults.addAll(excelAcctResultsOfOneEmp); - } - if (StringUtils.equals("importSalaryAcctResult", importType)) { - if (salaryAcctEmpId <= 0) { - SalaryAcctEmployeePO acctEmployee = SalaryAcctEmployeePO.builder() + SalaryAcctEmployeePO salaryAcctEmployee = salaryAcctEmployeeMap.get(employeeId + "-" + taxAgentId); + Long salaryAcctEmpId = Optional.ofNullable(salaryAcctEmployee).map(SalaryAcctEmployeePO::getId).orElse(0L); + if (StringUtils.equals("importExcelAcctResult", importType)) { + for (ExcelAcctResultPO excelAcctResultPO : excelAcctResultsOfOneEmp) { + excelAcctResultPO.setEmployeeId(employeeId); + excelAcctResultPO.setTaxAgentId(taxAgentId); + excelAcctResultPO.setSalaryAcctEmpId(salaryAcctEmpId); + } + excelAcctResults.addAll(excelAcctResultsOfOneEmp); + } + if (StringUtils.equals("importSalaryAcctResult", importType)) { + if (salaryAcctEmpId <= 0) { + SalaryAcctEmployeePO acctEmployee = SalaryAcctEmployeePO.builder() // .id(IdGenerator.generate()) - .employeeId(employeeId) - .salaryAcctRecordId(salaryAcctRecordId) - .salarySobId(salaryAcctRecordPO.getSalarySobId()) - .salaryMonth(salaryAcctRecordPO.getSalaryMonth()) - .taxAgentId(taxAgentId) - .creator(currentEmployeeId) - .createTime(now) - .updateTime(now) - .deleteType(0) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .build(); - newSalaryAcctEmployees.add(acctEmployee); - salaryAcctEmpId = acctEmployee.getId(); + .employeeId(employeeId) + .salaryAcctRecordId(salaryAcctRecordId) + .salarySobId(salaryAcctRecordPO.getSalarySobId()) + .salaryMonth(salaryAcctRecordPO.getSalaryMonth()) + .taxAgentId(taxAgentId) + .creator(currentEmployeeId) + .createTime(now) + .updateTime(now) + .deleteType(0) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build(); + newSalaryAcctEmployees.add(acctEmployee); + salaryAcctEmpId = acctEmployee.getId(); + } + for (SalaryAcctResultPO salaryAcctResultPO : salaryAcctResultsOfOneEmp) { + salaryAcctResultPO.setEmployeeId(employeeId); + salaryAcctResultPO.setTaxAgentId(taxAgentId); + salaryAcctResultPO.setSalaryAcctEmpId(salaryAcctEmpId); + } + salaryAcctEmpIds.add(salaryAcctEmpId); + salaryAcctResults.addAll(salaryAcctResultsOfOneEmp); } - for (SalaryAcctResultPO salaryAcctResultPO : salaryAcctResultsOfOneEmp) { - salaryAcctResultPO.setEmployeeId(employeeId); - salaryAcctResultPO.setTaxAgentId(taxAgentId); - salaryAcctResultPO.setSalaryAcctEmpId(salaryAcctEmpId); - } - salaryAcctEmpIds.add(salaryAcctEmpId); - salaryAcctResults.addAll(salaryAcctResultsOfOneEmp); + successCount++; } - successCount++; - } - // 如果sheet包含错误数据 + // 如果sheet包含错误数据 // if (CollectionUtils.isNotEmpty(errorDatas)) { // salaryBatchService.createErrorExcelSheet(headers, errorDatas, excelSheet.getName(), excelComments, errorExcelSheets); // } - if (StringUtils.equals("importExcelAcctResult", importType)) { - getSalaryComparisonResultService(user).deleteBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecordId)); - if (CollectionUtils.isNotEmpty(excelAcctResults)) { - getSalaryComparisonResultService(user).batchSave(excelAcctResults); + if (StringUtils.equals("importExcelAcctResult", importType)) { + getSalaryComparisonResultService(user).deleteBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecordId)); + if (CollectionUtils.isNotEmpty(excelAcctResults)) { + getSalaryComparisonResultService(user).batchSave(excelAcctResults); + } } - } - if (StringUtils.equals("importSalaryAcctResult", importType)) { - if (CollectionUtils.isNotEmpty(salaryAcctEmpIds)) { - getSalaryAcctResultService(user).deleteByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, excelSalaryItemIds); + if (StringUtils.equals("importSalaryAcctResult", importType)) { + if (CollectionUtils.isNotEmpty(salaryAcctEmpIds)) { + getSalaryAcctResultService(user).deleteByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, excelSalaryItemIds); + } + if (CollectionUtils.isNotEmpty(salaryAcctResults)) { + getSalaryAcctResultService(user).batchSave(salaryAcctResults); + } + if (CollectionUtils.isNotEmpty(newSalaryAcctEmployees)) { + getSalaryAcctEmployeeService(user).batchSave(newSalaryAcctEmployees); + } } - if (CollectionUtils.isNotEmpty(salaryAcctResults)) { - getSalaryAcctResultService(user).batchSave(salaryAcctResults); - } - if (CollectionUtils.isNotEmpty(newSalaryAcctEmployees)) { - getSalaryAcctEmployeeService(user).batchSave(newSalaryAcctEmployees); - } - } + apidatas.put("successCount", successCount); + apidatas.put("errorCount", failCount); + apidatas.put("errorData", excelComments); + + } finally { + IOUtils.closeQuietly(fileInputStream); + } // 发送导入回调信息 // salaryBatchService.sendImportCallBackInfo(message, successCount, failCount, errorExcelSheets); - return null; + return apidatas; } // @Override diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index f735b85fd..eb04cff65 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -181,6 +181,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // 薪资核算结果的分页结果 PageInfo> resultPage = new PageInfo<>(); resultPage.setList(data); + resultPage.setTotal(page.getTotal()); + resultPage.setPageNum(page.getPageNum()); + resultPage.setPageSize(page.getPageSize()); return resultPage; } diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 5909e8b2e..4281c1e05 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -1,7 +1,10 @@ package com.engine.salary.web; import com.engine.common.util.ServiceUtil; -import com.engine.salary.entity.salaryacct.dto.*; +import com.engine.salary.entity.salaryacct.dto.ConsolidatedTaxDetailDTO; +import com.engine.salary.entity.salaryacct.dto.SalaryAccEmployeeListDTO; +import com.engine.salary.entity.salaryacct.dto.SalaryAcctImportFieldDTO; +import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultDetailDTO; import com.engine.salary.entity.salaryacct.param.*; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.enums.salarysob.SalaryEmployeeStatusEnum; @@ -89,7 +92,7 @@ public class SalaryAcctController { @Produces(MediaType.APPLICATION_JSON) public String getForm(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>().run(getSalaryAcctRecordWrapper(user)::getForm, id); + return new ResponseResult>().run(getSalaryAcctRecordWrapper(user)::getForm, id); } //获取薪资核算的薪资周期、考勤周期等 @@ -424,6 +427,15 @@ public class SalaryAcctController { return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); } + //导入核算结果 + @POST + @Path("/acctresult/importParams") + @Produces(MediaType.APPLICATION_JSON) + public String importSalaryAcctResult(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctImportParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>().run(getSalaryAcctExcelService(user)::importSalaryAcctResult, param); + } + // **********************************薪资核算结果 end*********************************/ // **********************************检验异常 start*********************************/ @@ -591,7 +603,7 @@ public class SalaryAcctController { public Response exportComparisonResultTemplate(@Context HttpServletRequest request, @Context HttpServletResponse response) { SalaryComparisonResultExportParam param = new SalaryComparisonResultExportParam(); String salaryAcctRecordId = request.getParameter("salaryAcctRecordId"); - if(StringUtils.isNotBlank(salaryAcctRecordId)){ + if (StringUtils.isNotBlank(salaryAcctRecordId)) { param.setSalaryAcctRecordId(Long.parseLong(salaryAcctRecordId)); } @@ -612,5 +624,15 @@ public class SalaryAcctController { return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); } + //导入线下核算结果 + @POST + @Path("/comparisonresult/importExcelAcctResult") + @Produces(MediaType.APPLICATION_JSON) + public String importExcelAcctResult(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctImportParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>().run(getSalaryAcctExcelService(user)::importExcelAcctResult, param); + } + + /**********************************线下对比 end*********************************/ } From ccd4768a0e3ab654cc45f1956015e6d4d3c7f4cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 19 Apr 2022 19:34:57 +0800 Subject: [PATCH 12/14] =?UTF-8?q?=E7=BA=BF=E4=B8=8B=E5=AF=B9=E6=AF=94?= =?UTF-8?q?=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/web/SalaryAcctController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 4281c1e05..9c2c8eedd 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -429,7 +429,7 @@ public class SalaryAcctController { //导入核算结果 @POST - @Path("/acctresult/importParams") + @Path("/acctresult/importSalaryAcctResult") @Produces(MediaType.APPLICATION_JSON) public String importSalaryAcctResult(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctImportParam param) { User user = HrmUserVarify.getUser(request, response); From b1b086caf18236c4cda667f79690dfa36b6c408e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 19 Apr 2022 19:50:00 +0800 Subject: [PATCH 13/14] =?UTF-8?q?=E9=A2=84=E8=A7=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/SalaryAcctExcelService.java | 2 ++ .../impl/SalaryAcctExcelServiceImpl.java | 27 +++++++++++++++++++ .../salary/web/SalaryAcctController.java | 19 +++++++++++-- 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/service/SalaryAcctExcelService.java b/src/com/engine/salary/service/SalaryAcctExcelService.java index de8c8ecb3..ee22c3f3a 100644 --- a/src/com/engine/salary/service/SalaryAcctExcelService.java +++ b/src/com/engine/salary/service/SalaryAcctExcelService.java @@ -83,6 +83,8 @@ public interface SalaryAcctExcelService { Map importExcelAcctResult(SalaryAcctImportParam param); + Map preview(SalaryAcctImportParam param); + // // /** // * 薪资核算结果校验异常导出 diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 6f6ec0a28..26c3f214f 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -429,6 +429,33 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc return batchImport(param, "importExcelAcctResult"); } + @Override + public Map preview(SalaryAcctImportParam param) { + + //1、参数校验 + ValidUtil.doValidator(param); + + Map map = new HashMap<>(); + + InputStream fileInputStream = null; + try { + +// try { + fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); +// fileInputStream = new FileInputStream("C:\\Users\\钱涛\\Desktop\\salaryItemAdjust.xlsx"); +// } catch (FileNotFoundException e) { +// e.printStackTrace(); +// } + Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); + map.put("headers", ExcelSupport.getSheetHeader(sheet, 0)); + map.put("list", ExcelParseHelper.parse2List(sheet, 1)); + return map; + + } finally { + IOUtils.closeQuietly(fileInputStream); + } + } + private Map batchImport(SalaryAcctImportParam param, String importType) { Map apidatas = new HashMap(); ValidUtil.doValidator(param); diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 9c2c8eedd..a1dced8dd 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -436,6 +436,14 @@ public class SalaryAcctController { return new ResponseResult>().run(getSalaryAcctExcelService(user)::importSalaryAcctResult, param); } + @POST + @Path("/acctresult/preview") + @Produces(MediaType.APPLICATION_JSON) + public String importSalaryAcctResultPreview(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctImportParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>().run(getSalaryAcctExcelService(user)::preview, param); + } + // **********************************薪资核算结果 end*********************************/ // **********************************检验异常 start*********************************/ @@ -626,13 +634,20 @@ public class SalaryAcctController { //导入线下核算结果 @POST - @Path("/comparisonresult/importExcelAcctResult") + @Path("/comparisonresult/importExcelAcctResult/preview") @Produces(MediaType.APPLICATION_JSON) public String importExcelAcctResult(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctImportParam param) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>().run(getSalaryAcctExcelService(user)::importExcelAcctResult, param); + return new ResponseResult>().run(getSalaryAcctExcelService(user)::preview, param); } + @POST + @Path("/comparisonresult/preview") + @Produces(MediaType.APPLICATION_JSON) + public String importExcelAcctResultPreview(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctImportParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>().run(getSalaryAcctExcelService(user)::preview, param); + } /**********************************线下对比 end*********************************/ } From cb30e24e95fb48406b696a16e98fd4d35c8f89f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 19 Apr 2022 20:33:06 +0800 Subject: [PATCH 14/14] =?UTF-8?q?=E5=85=AC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/web/SalarySobController.java | 3 +- .../salary/wrapper/SalarySobItemWrapper.java | 117 ++++++++++-------- 2 files changed, 64 insertions(+), 56 deletions(-) diff --git a/src/com/engine/salary/web/SalarySobController.java b/src/com/engine/salary/web/SalarySobController.java index 3d6dad578..8278ee40d 100644 --- a/src/com/engine/salary/web/SalarySobController.java +++ b/src/com/engine/salary/web/SalarySobController.java @@ -1,6 +1,7 @@ package com.engine.salary.web; import com.engine.common.util.ServiceUtil; +import com.engine.salary.entity.salaryitem.dto.SalaryItemListDTO; import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; import com.engine.salary.entity.salarysob.dto.*; import com.engine.salary.entity.salarysob.param.*; @@ -206,7 +207,7 @@ public class SalarySobController { @Produces(MediaType.APPLICATION_JSON) public String listSalaryItem(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryItemSearchParam queryParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>().run(getSalarySobItemWrapper(user)::listPage4SalaryItem, queryParam); + return new ResponseResult >().run(getSalarySobItemWrapper(user)::listPage4SalaryItem, queryParam); } diff --git a/src/com/engine/salary/wrapper/SalarySobItemWrapper.java b/src/com/engine/salary/wrapper/SalarySobItemWrapper.java index 6316a2aaa..ccb221841 100644 --- a/src/com/engine/salary/wrapper/SalarySobItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySobItemWrapper.java @@ -1,13 +1,14 @@ package com.engine.salary.wrapper; -import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.annotation.SalaryFormulaVar; -import com.engine.salary.component.SalaryWeaTable; import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.salaryformula.ExpressFormula; +import com.engine.salary.entity.salaryitem.bo.SalaryItemBO; import com.engine.salary.entity.salaryitem.dto.SalaryItemListDTO; import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; +import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; import com.engine.salary.entity.salarysob.param.SalarySobItemSaveParam; import com.engine.salary.entity.salarysob.po.SalarySobItemGroupPO; @@ -15,12 +16,15 @@ import com.engine.salary.service.SalaryFormulaService; import com.engine.salary.service.SalaryItemService; import com.engine.salary.service.SalarySobItemGroupService; import com.engine.salary.service.SalarySobItemService; +import com.engine.salary.service.impl.SalaryFormulaServiceImpl; import com.engine.salary.service.impl.SalaryItemServiceImpl; import com.engine.salary.service.impl.SalarySobItemGroupServiceImpl; import com.engine.salary.service.impl.SalarySobItemServiceImpl; +import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.page.PageInfo; import com.google.common.collect.Maps; -import org.springframework.stereotype.Component; +import org.apache.commons.collections4.CollectionUtils; import weaver.hrm.User; import java.lang.reflect.Field; @@ -50,7 +54,9 @@ public class SalarySobItemWrapper extends Service { } - private SalaryFormulaService salaryFormulaService; + private SalaryFormulaService getSalaryFormulaService(User user) { + return (SalaryFormulaService) ServiceUtil.getService(SalaryFormulaServiceImpl.class, user); + } /** * 薪资账套可选薪资项目列表 @@ -58,59 +64,60 @@ public class SalarySobItemWrapper extends Service { * @param queryParam 列表查询条件 * @return */ - public Map listPage4SalaryItem(SalaryItemSearchParam queryParam) { - SalaryWeaTable table = new SalaryWeaTable(user, SalaryItemListDTO.class); - - String fields = " t.id" + - " , t.name" + - " , t.code" + - " , t.system_type" + - " , t.sys_salary_item_id" + - " , t.category" + - " , t.item_type as itemType" + - " , t.use_default as useDefault" + - " , t.use_in_employee_salary as useInEmployeeSalary" + - " , t.rounding_mode as roundingMode" + - " , t.pattern" + - " , t.value_type as valueType" + - " , t.datasource" + - " , t.formula_id" + - " , t.description" + - " , t.can_edit" + - " , t.can_delete"; - - String from = "from hrsa_salary_item t"; - - table.setBackfields(fields); - table.setSqlform(from); - table.setSqlwhere(SalaryItemSearchParam.makeSqlWhere(queryParam)); - table.setSqlorderby("t.id DESC"); - table.setSqlprimarykey("t.id"); - table.setSqlisdistinct("false"); - - WeaResultMsg result = new WeaResultMsg(false); - result.putAll(table.makeDataResult()); - result.success(); - return result.getResultMap(); + public PageInfo listPage4SalaryItem(SalaryItemSearchParam queryParam) { +// SalaryWeaTable table = new SalaryWeaTable(user, SalaryItemListDTO.class); +// +// String fields = " t.id" + +// " , t.name" + +// " , t.code" + +// " , t.system_type" + +// " , t.sys_salary_item_id" + +// " , t.category" + +// " , t.item_type as itemType" + +// " , t.use_default as useDefault" + +// " , t.use_in_employee_salary as useInEmployeeSalary" + +// " , t.rounding_mode as roundingMode" + +// " , t.pattern" + +// " , t.value_type as valueType" + +// " , t.datasource" + +// " , t.formula_id" + +// " , t.description" + +// " , t.can_edit" + +// " , t.can_delete"; +// +// String from = "from hrsa_salary_item t"; +// +// table.setBackfields(fields); +// table.setSqlform(from); +// table.setSqlwhere(SalaryItemSearchParam.makeSqlWhere(queryParam)); +// table.setSqlorderby("t.id DESC"); +// table.setSqlprimarykey("t.id"); +// table.setSqlisdistinct("false"); +// +// WeaResultMsg result = new WeaResultMsg(false); +// result.putAll(table.makeDataResult()); +// result.success(); +// return result.getResultMap(); -// // 分页查询薪资项目 -// Page page = salaryItemService.listPageByParam(queryParam); -// Page dtoPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal(), page.isSearchCount()); -// if (CollectionUtils.isNotEmpty(page.getRecords())) { -// // 查询公式 -// Set formulaIds = SalaryEntityUtil.properties(page.getRecords(), SalaryItemPO::getFormulaId); -// List expressFormulas = salaryFormulaService.listExpressFormula(formulaIds, tenantKey); -// // 转换成薪资项目列表dto -// dtoPage.setRecords(SalaryItemBO.convert2ListDTO(page.getRecords(), expressFormulas)); -// } -// // 构建前端所需的数据格式 -// WeaTable weaTable = SalaryFormatUtil.getInstance().buildTable(SalaryItemListDTO.class, dtoPage); -// // 列表可勾选但是不需要操作列 -// weaTable.setTableType(WeaTableTypeEnum.CHECKBOX); -// weaTable.setOperates(Collections.emptyList()); -// weaTable.setOperatesPermission(Collections.emptyList()); -// return weaTable; + // 分页查询薪资项目 + PageInfo page = getSalaryItemService(user).listPageByParam(queryParam); + + List salaryItemList = page.getList(); + + //最终返回的分页对象 + PageInfo dtoPage = new PageInfo<>(SalaryItemListDTO.class); + dtoPage.setPageSize(page.getPageSize()); + dtoPage.setPageNum(page.getPageNum()); + dtoPage.setTotal(page.getTotal()); + if (CollectionUtils.isNotEmpty(salaryItemList)) { + // 查询公式 + Set formulaIds = SalaryEntityUtil.properties(salaryItemList, SalaryItemPO::getFormulaId); + List expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds); + // 转换成薪资项目列表dto + dtoPage.setList(SalaryItemBO.convert2ListDTO(salaryItemList, expressFormulas)); + } + return dtoPage; }