package com.iplatform.base.excel; import com.iplatform.base.di.JdbcExcelDataImportor; import com.iplatform.base.util.DataImportUtils; import com.walker.di.UpdateResult; import com.walker.di.UpdateType; import com.walker.infrastructure.utils.PhoneNumberUtils; import com.walker.infrastructure.utils.StringUtils; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import java.io.InputStream; import java.util.Arrays; import java.util.List; import java.util.Map; /** * 系统用户导入器实现。 * @author 时克英 * @date 2023-02-07 */ public class UserDataImportor extends JdbcExcelDataImportor { // public UserDataImportor(File file){ // this.setBatchEnabled(); // this.setBatchSleepMills(200); // this.setUpdateType(UpdateType.Override); // 设置更新策略为:覆盖记录 // try { // this.setSource(new BufferedInputStream(new FileInputStream(file))); // } catch (FileNotFoundException e) { // throw new RuntimeException(e); // } // } public UserDataImportor(InputStream inputStream){ this.setBatchEnabled(); this.setBatchSleepMills(200); this.setUpdateType(UpdateType.Override); // 设置更新策略为:覆盖记录 this.setSource(inputStream); } @Override protected String acquireTableName() { return "s_user_core"; } @Override protected boolean isCheckDataExist() { return true; } @Override protected UpdateResult checkDataExist(String tableName, List> mapList) { // 1 - 根据导入原始数据查询是否在表中存在这些记录 MapSqlParameterSource sqlParameterSource = new MapSqlParameterSource(); List paramUserName = DataImportUtils.acquireWhereInStringValues("user_name", mapList); sqlParameterSource.addValue("userName", paramUserName); List> existList = this.getDataImportService().queryListObjectWhereIn(SQL_QUERY, sqlParameterSource); if(!StringUtils.isEmptyList(existList)){ if(this.logger.isDebugEnabled()){ for(Map existOne : existList){ logger.debug("存在一条数据 = " + existOne); } } } // 创建更新结果对象 UpdateResult updateResult = new UpdateResult(); // 2 - 设置准备更新的'条件字段集合',可支持多个 List whereColumnNames = Arrays.asList("user_name"); // 3 - 找到新写入和需要更新的数据集合 Object[] result = DataImportUtils.calculateInsertAndUpdateList(mapList, existList, whereColumnNames); List> insertList = (List>)result[0]; List> updateList = (List>)result[1]; // 4 - 设置要写入集合 updateResult.setInsertList(insertList); // 5 - 如果更新策略为覆盖,则设置要更新集合 if(this.getUpdateType() == UpdateType.Override){ // 如果更新数据策略为: 覆盖模式,需要批量更新数据,这里获得更新集合给平台。 updateResult.setUpdateColumnNames(Arrays.asList("dept_id", "org_id", "nick_name", "user_type", "email", "phonenumber", "sex")); updateResult.setWhereColumnNames(whereColumnNames); updateResult.setUpdateList(updateList); } return updateResult; } @Override protected String validateData(Map data) { if(data.get("user_name") == null){ return "登录名不存在"; } if(data.get("nick_name") == null){ return "昵称不存在"; } if(data.get("user_type") == null){ return "用户类型不存在"; } String phoneNumber = data.get("phonenumber"); if(StringUtils.isNotEmpty(phoneNumber) && !PhoneNumberUtils.isCellPhoneNumber(phoneNumber)){ return "手机号格式错误"; } return null; } private static final String SQL_QUERY = "select * from s_user_core where user_name in (:userName)"; }