用友实习-debug日志
本周主要进入的项目是FDIP下的全面税务管理项目,主要对项目中的需求性bug进行修改,并通过GitLab与同事进行版本控制,于周末同意打新补丁,更新项目版本。

需求BUG
人员工时明细,导入导出模板中将原来机构改为机构名称,增加一列字段名为机构编码,导入时根据人员编码查找人员基本信息反写机构编码与名称,注意导出时机构编码与名称是否有值
要对Excel的导入导出流进行逻辑校验,并且对excel模板进行修改。FDIP的excel是通过输入输出流手搓的一个excel导入导出功能,并没有使用Spring框架以及第三方库Apache POI 和 JExcelAPI
实现Excel导入导出,所以在理解代码的就花了不少时间。

FDIP是通过批注的方式控制Excel的导出范围,当新增列或者行的时候需要对应的修改批注,不然会造成数据丢失:
行和列都要调整


导出的时候需要把新增的列也就是机构编码查询出来并放进导出数据集中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| Set<String> staffNoSet = staffHourDetailExportList.stream() .map(StaffHourDetailExport::getStaffNo) .filter(Objects::nonNull) .collect(Collectors.toSet());
List<StaffHourDetailExport> orgDetails = staffHourDetailService.queryOrgByStaffNo(staffNoSet, null); Map<String, String> staffNoToPkOrgMap = orgDetails.stream() .collect(Collectors.toMap( StaffHourDetailExport::getStaffNo, StaffHourDetailExport::getPkOrg, (existingValue, newValue) -> existingValue ));
staffHourDetailExportList.forEach(detail -> { if (detail.getStaffNo() != null && staffNoToPkOrgMap.containsKey(detail.getStaffNo())) { detail.setPkOrg(staffNoToPkOrgMap.get(detail.getStaffNo())); } });
|

最后就可以实现导出了:

导入的时候就需要staffNoSet
就是人员编号列表去查询每个人员对应的staffNo
和staffNmae
然后再反写到excelData,在进行导入操作就能实现需求。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| Set<String> staffNoSet = data.stream().map(d -> d.get("staffNo").toString()).collect(Collectors.toSet()); List<StaffHourDetailExport> orgDetails = this.staffHourDetailService.queryOrgByStaffNo(staffNoSet, null);
Map<String, StaffHourDetailExport> staffOrgMap = orgDetails.stream() .filter(orgDetail -> orgDetail != null && orgDetail.getStaffNo() != null) .collect(Collectors.toMap( StaffHourDetailExport::getStaffNo, orgDetail -> orgDetail, (existing, replacement) -> existing ));
for (Map<String, Object> excelData : data) { String staffNo = excelData.get("staffNo").toString(); if (staffOrgMap.containsKey(staffNo)) { StaffHourDetailExport orgDetail = staffOrgMap.get(staffNo); excelData.put("pkOrg", orgDetail.getPkOrg()); excelData.put("pkOrgName", orgDetail.getPkOrgName()); } else { excelData.put("pkOrg", ""); excelData.put("pkOrgName", ""); } }
|