泛微ecology9 建模表通过execl批量导入数据时对导入的数据进行处理(导入转换接口)
需求说明
需求的起因是因为导入人员工资时需要展示人员的部门和职位等信息,但由于人员的组织经常变动,通过修改execl的方式维护太麻烦,希望能改成直接导入的时候这些信息用系统自带的。这种时候就可以用到批量导入的导入转换接口

代码实现
java
package com.weaver.formmode.interfaces.impl;
import java.util.Map;
import weaver.conn.RecordSet;
import weaver.file.ExcelParseForPOI;
import weaver.formmode.interfaces.ImportFieldTransActionPOI;
import weaver.general.BaseBean;
import weaver.general.Util;
import weaver.hrm.User;
/**
* 建模导入自动填充:部门ID、工号、岗位ID
* @author liron
*/
public class BringOutPersonnelInformation implements ImportFieldTransActionPOI {
private final BaseBean log = new BaseBean();
@Override
public String getTransValue(Map<String, Object> param, User user, ExcelParseForPOI excelParse, int row, int col) {
try {
// 字段信息
String fieldName = Util.null2String(param.get("fieldname"));
String sheetIndex = Util.null2String(param.get("sheetindex"));
// 第3列(索引2)获取 人员ID
String loginId = Util.null2String(excelParse.getValue(sheetIndex, row, 4));
String cellValue = Util.null2String(excelParse.getValue(sheetIndex, row, col));
// 人员ID为空直接返回
if (loginId.isEmpty()) {
return cellValue;
}
// 根据字段名自动查询对应值
switch (fieldName) {
case "bm":
cellValue = getUserInfo(loginId, "departmentid");
break;
case "zw":
cellValue = getUserInfo(loginId, "jobtitle");
break;
default:
break;
}
return cellValue;
} catch (Exception e) {
log.writeLog("[导入人员信息] 异常:" + e.getMessage());
return "";
}
}
/**
* 公共查询方法:根据人员ID获取 hrmresource 表任意字段
*/
private String getUserInfo(String loginId, String field) {
RecordSet rs = new RecordSet(); // 必须每次新建,防止并发错乱
String sql = "select " + field + " from hrmresource where loginId = ?";
// 防SQL注入,使用 ? 占位符
rs.executeQuery(sql, loginId);
if (rs.next()) {
return Util.null2String(rs.getString(field));
}
return "";
}
}