mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 02:08:43 +08:00 
			
		
		
		
	新增用户导入
This commit is contained in:
		| @@ -117,3 +117,11 @@ export function uploadAvatar(data) { | |||||||
|     data: data |     data: data | ||||||
|   }) |   }) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // 下载用户导入模板 | ||||||
|  | export function importTemplate() { | ||||||
|  |   return request({ | ||||||
|  |     url: '/system/user/importTemplate', | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -112,6 +112,15 @@ | |||||||
|               v-hasPermi="['system:user:remove']" |               v-hasPermi="['system:user:remove']" | ||||||
|             >删除</el-button> |             >删除</el-button> | ||||||
|           </el-col> |           </el-col> | ||||||
|  |           <el-col :span="1.5"> | ||||||
|  |             <el-button | ||||||
|  |               type="info" | ||||||
|  |               icon="el-icon-upload2" | ||||||
|  |               size="mini" | ||||||
|  |               @click="handleImport" | ||||||
|  |               v-hasPermi="['system:user:import']" | ||||||
|  |             >导入</el-button> | ||||||
|  |           </el-col> | ||||||
|           <el-col :span="1.5"> |           <el-col :span="1.5"> | ||||||
|             <el-button |             <el-button | ||||||
|               type="warning" |               type="warning" | ||||||
| @@ -284,11 +293,43 @@ | |||||||
|         <el-button @click="cancel">取 消</el-button> |         <el-button @click="cancel">取 消</el-button> | ||||||
|       </div> |       </div> | ||||||
|     </el-dialog> |     </el-dialog> | ||||||
|  |  | ||||||
|  |     <!-- 用户导入对话框 --> | ||||||
|  |     <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px"> | ||||||
|  |       <el-upload | ||||||
|  |         ref="upload" | ||||||
|  |         :limit="1" | ||||||
|  |         accept=".xlsx, .xls" | ||||||
|  |         :headers="upload.headers" | ||||||
|  |         :action="upload.url + '?updateSupport=' + upload.updateSupport" | ||||||
|  |         :disabled="upload.isUploading" | ||||||
|  |         :on-progress="handleFileUploadProgress" | ||||||
|  |         :on-success="handleFileSuccess" | ||||||
|  |         :auto-upload="false" | ||||||
|  |         drag | ||||||
|  |       > | ||||||
|  |         <i class="el-icon-upload"></i> | ||||||
|  |         <div class="el-upload__text"> | ||||||
|  |           将文件拖到此处,或 | ||||||
|  |           <em>点击上传</em> | ||||||
|  |         </div> | ||||||
|  |         <div class="el-upload__tip" slot="tip"> | ||||||
|  |           <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据 | ||||||
|  |           <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link> | ||||||
|  |         </div> | ||||||
|  |         <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div> | ||||||
|  |       </el-upload> | ||||||
|  |       <div slot="footer" class="dialog-footer"> | ||||||
|  |         <el-button type="primary" @click="submitFileForm">确 定</el-button> | ||||||
|  |         <el-button @click="upload.open = false">取 消</el-button> | ||||||
|  |       </div> | ||||||
|  |     </el-dialog> | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
| <script> | <script> | ||||||
| import { listUser, getUser, delUser, addUser, updateUser, exportUser, resetUserPwd, changeUserStatus } from "@/api/system/user"; | import { listUser, getUser, delUser, addUser, updateUser, exportUser, resetUserPwd, changeUserStatus, importTemplate } from "@/api/system/user"; | ||||||
|  | import { getToken } from "@/utils/auth"; | ||||||
| import { treeselect } from "@/api/system/dept"; | import { treeselect } from "@/api/system/dept"; | ||||||
| import Treeselect from "@riophae/vue-treeselect"; | import Treeselect from "@riophae/vue-treeselect"; | ||||||
| import "@riophae/vue-treeselect/dist/vue-treeselect.css"; | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; | ||||||
| @@ -336,6 +377,21 @@ export default { | |||||||
|         children: "children", |         children: "children", | ||||||
|         label: "label" |         label: "label" | ||||||
|       }, |       }, | ||||||
|  |       // 用户导入参数 | ||||||
|  |       upload: { | ||||||
|  |         // 是否显示弹出层(用户导入) | ||||||
|  |         open: false, | ||||||
|  |         // 弹出层标题(用户导入) | ||||||
|  |         title: "", | ||||||
|  |         // 是否禁用上传 | ||||||
|  |         isUploading: false, | ||||||
|  |         // 是否更新已经存在的用户数据 | ||||||
|  |         updateSupport: 0, | ||||||
|  |         // 设置上传的请求头部 | ||||||
|  |         headers: { Authorization: "Bearer " + getToken() }, | ||||||
|  |         // 上传的地址 | ||||||
|  |         url: process.env.VUE_APP_BASE_API + "/system/user/importData" | ||||||
|  |       }, | ||||||
|       // 查询参数 |       // 查询参数 | ||||||
|       queryParams: { |       queryParams: { | ||||||
|         pageNum: 1, |         pageNum: 1, | ||||||
| @@ -473,9 +529,9 @@ export default { | |||||||
|     }, |     }, | ||||||
|     // 多选框选中数据 |     // 多选框选中数据 | ||||||
|     handleSelectionChange(selection) { |     handleSelectionChange(selection) { | ||||||
|       this.ids = selection.map(item => item.userId) |       this.ids = selection.map(item => item.userId); | ||||||
|       this.single = selection.length!=1 |       this.single = selection.length != 1; | ||||||
|       this.multiple = !selection.length |       this.multiple = !selection.length; | ||||||
|     }, |     }, | ||||||
|     /** 新增按钮操作 */ |     /** 新增按钮操作 */ | ||||||
|     handleAdd() { |     handleAdd() { | ||||||
| @@ -493,7 +549,7 @@ export default { | |||||||
|     handleUpdate(row) { |     handleUpdate(row) { | ||||||
|       this.reset(); |       this.reset(); | ||||||
|       this.getTreeselect(); |       this.getTreeselect(); | ||||||
|       const userId = row.userId || this.ids |       const userId = row.userId || this.ids; | ||||||
|       getUser(userId).then(response => { |       getUser(userId).then(response => { | ||||||
|         this.form = response.data; |         this.form = response.data; | ||||||
|         this.postOptions = response.posts; |         this.postOptions = response.posts; | ||||||
| @@ -574,6 +630,33 @@ export default { | |||||||
|         }).then(response => { |         }).then(response => { | ||||||
|           this.download(response.msg); |           this.download(response.msg); | ||||||
|         }).catch(function() {}); |         }).catch(function() {}); | ||||||
|  |     }, | ||||||
|  |     /** 导入按钮操作 */ | ||||||
|  |     handleImport() { | ||||||
|  |       this.upload.title = "用户导入"; | ||||||
|  |       this.upload.open = true; | ||||||
|  |     }, | ||||||
|  |     /** 下载模板操作 */ | ||||||
|  |     importTemplate() { | ||||||
|  |       importTemplate().then(response => { | ||||||
|  |         this.download(response.msg); | ||||||
|  |       }); | ||||||
|  |     }, | ||||||
|  |     // 文件上传中处理 | ||||||
|  |     handleFileUploadProgress(event, file, fileList) { | ||||||
|  |       this.upload.isUploading = true; | ||||||
|  |     }, | ||||||
|  |     // 文件上传成功处理 | ||||||
|  |     handleFileSuccess(response, file, fileList) { | ||||||
|  |       this.upload.open = false; | ||||||
|  |       this.upload.isUploading = false; | ||||||
|  |       this.$refs.upload.clearFiles(); | ||||||
|  |       this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true }); | ||||||
|  |       this.getList(); | ||||||
|  |     }, | ||||||
|  |     // 提交上传文件 | ||||||
|  |     submitFileForm() { | ||||||
|  |       this.$refs.upload.submit(); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| }; | }; | ||||||
|   | |||||||
| @@ -12,12 +12,16 @@ import org.springframework.web.bind.annotation.PutMapping; | |||||||
| import org.springframework.web.bind.annotation.RequestBody; | import org.springframework.web.bind.annotation.RequestBody; | ||||||
| import org.springframework.web.bind.annotation.RequestMapping; | import org.springframework.web.bind.annotation.RequestMapping; | ||||||
| import org.springframework.web.bind.annotation.RestController; | import org.springframework.web.bind.annotation.RestController; | ||||||
|  | import org.springframework.web.multipart.MultipartFile; | ||||||
| import com.ruoyi.common.constant.UserConstants; | import com.ruoyi.common.constant.UserConstants; | ||||||
| import com.ruoyi.common.utils.SecurityUtils; | import com.ruoyi.common.utils.SecurityUtils; | ||||||
|  | import com.ruoyi.common.utils.ServletUtils; | ||||||
| import com.ruoyi.common.utils.StringUtils; | import com.ruoyi.common.utils.StringUtils; | ||||||
| import com.ruoyi.common.utils.poi.ExcelUtil; | import com.ruoyi.common.utils.poi.ExcelUtil; | ||||||
| import com.ruoyi.framework.aspectj.lang.annotation.Log; | import com.ruoyi.framework.aspectj.lang.annotation.Log; | ||||||
| import com.ruoyi.framework.aspectj.lang.enums.BusinessType; | import com.ruoyi.framework.aspectj.lang.enums.BusinessType; | ||||||
|  | import com.ruoyi.framework.security.LoginUser; | ||||||
|  | import com.ruoyi.framework.security.service.TokenService; | ||||||
| import com.ruoyi.framework.web.controller.BaseController; | import com.ruoyi.framework.web.controller.BaseController; | ||||||
| import com.ruoyi.framework.web.domain.AjaxResult; | import com.ruoyi.framework.web.domain.AjaxResult; | ||||||
| import com.ruoyi.framework.web.page.TableDataInfo; | import com.ruoyi.framework.web.page.TableDataInfo; | ||||||
| @@ -44,6 +48,9 @@ public class SysUserController extends BaseController | |||||||
|     @Autowired |     @Autowired | ||||||
|     private ISysPostService postService; |     private ISysPostService postService; | ||||||
|  |  | ||||||
|  |     @Autowired | ||||||
|  |     private TokenService tokenService; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 获取用户列表 |      * 获取用户列表 | ||||||
|      */ |      */ | ||||||
| @@ -66,6 +73,26 @@ public class SysUserController extends BaseController | |||||||
|         return util.exportExcel(list, "用户数据"); |         return util.exportExcel(list, "用户数据"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     @Log(title = "用户管理", businessType = BusinessType.IMPORT) | ||||||
|  |     @PreAuthorize("@ss.hasPermi('system:user:import')") | ||||||
|  |     @PostMapping("/importData") | ||||||
|  |     public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception | ||||||
|  |     { | ||||||
|  |         ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class); | ||||||
|  |         List<SysUser> userList = util.importExcel(file.getInputStream()); | ||||||
|  |         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); | ||||||
|  |         String operName = loginUser.getUsername(); | ||||||
|  |         String message = userService.importUser(userList, updateSupport, operName); | ||||||
|  |         return AjaxResult.success(message); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @GetMapping("/importTemplate") | ||||||
|  |     public AjaxResult importTemplate() | ||||||
|  |     { | ||||||
|  |         ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class); | ||||||
|  |         return util.importTemplateExcel("用户数据"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 根据用户编号获取详细信息 |      * 根据用户编号获取详细信息 | ||||||
|      */ |      */ | ||||||
|   | |||||||
| @@ -9,6 +9,7 @@ import org.apache.commons.lang3.builder.ToStringBuilder; | |||||||
| import org.apache.commons.lang3.builder.ToStringStyle; | import org.apache.commons.lang3.builder.ToStringStyle; | ||||||
| import com.ruoyi.framework.aspectj.lang.annotation.Excel; | import com.ruoyi.framework.aspectj.lang.annotation.Excel; | ||||||
| import com.ruoyi.framework.aspectj.lang.annotation.Excel.ColumnType; | import com.ruoyi.framework.aspectj.lang.annotation.Excel.ColumnType; | ||||||
|  | import com.ruoyi.framework.aspectj.lang.annotation.Excel.Type; | ||||||
| import com.ruoyi.framework.aspectj.lang.annotation.Excels; | import com.ruoyi.framework.aspectj.lang.annotation.Excels; | ||||||
| import com.ruoyi.framework.web.domain.BaseEntity; | import com.ruoyi.framework.web.domain.BaseEntity; | ||||||
|  |  | ||||||
| @@ -26,6 +27,7 @@ public class SysUser extends BaseEntity | |||||||
|     private Long userId; |     private Long userId; | ||||||
|  |  | ||||||
|     /** 部门ID */ |     /** 部门ID */ | ||||||
|  |     @Excel(name = "部门编号", type = Type.IMPORT) | ||||||
|     private Long deptId; |     private Long deptId; | ||||||
|  |  | ||||||
|     /** 用户账号 */ |     /** 用户账号 */ | ||||||
| @@ -65,15 +67,18 @@ public class SysUser extends BaseEntity | |||||||
|     private String delFlag; |     private String delFlag; | ||||||
|  |  | ||||||
|     /** 最后登陆IP */ |     /** 最后登陆IP */ | ||||||
|     @Excel(name = "最后登陆IP") |     @Excel(name = "最后登陆IP", type = Type.EXPORT) | ||||||
|     private String loginIp; |     private String loginIp; | ||||||
|  |  | ||||||
|     /** 最后登陆时间 */ |     /** 最后登陆时间 */ | ||||||
|     @Excel(name = "最后登陆时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") |     @Excel(name = "最后登陆时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT) | ||||||
|     private Date loginDate; |     private Date loginDate; | ||||||
|  |  | ||||||
|     /** 部门对象 */ |     /** 部门对象 */ | ||||||
|     @Excels({ @Excel(name = "部门名称", targetAttr = "deptName"), @Excel(name = "部门负责人", targetAttr = "leader") }) |     @Excels({ | ||||||
|  |         @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT), | ||||||
|  |         @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT) | ||||||
|  |     }) | ||||||
|     private SysDept dept; |     private SysDept dept; | ||||||
|  |  | ||||||
|     /** 角色对象 */ |     /** 角色对象 */ | ||||||
|   | |||||||
| @@ -24,7 +24,7 @@ public interface ISysConfigService | |||||||
|      * @param configKey 参数键名 |      * @param configKey 参数键名 | ||||||
|      * @return 参数键值 |      * @return 参数键值 | ||||||
|      */ |      */ | ||||||
|     public Object selectConfigByKey(String configKey); |     public String selectConfigByKey(String configKey); | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 查询参数配置列表 |      * 查询参数配置列表 | ||||||
|   | |||||||
| @@ -154,4 +154,14 @@ public interface ISysUserService | |||||||
|      * @return 结果 |      * @return 结果 | ||||||
|      */ |      */ | ||||||
|     public int deleteUserByIds(Long[] userIds); |     public int deleteUserByIds(Long[] userIds); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 导入用户数据 | ||||||
|  |      *  | ||||||
|  |      * @param userList 用户数据列表 | ||||||
|  |      * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 | ||||||
|  |      * @param operName 操作用户 | ||||||
|  |      * @return 结果 | ||||||
|  |      */ | ||||||
|  |     public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -41,7 +41,7 @@ public class SysConfigServiceImpl implements ISysConfigService | |||||||
|      * @return 参数键值 |      * @return 参数键值 | ||||||
|      */ |      */ | ||||||
|     @Override |     @Override | ||||||
|     public Object selectConfigByKey(String configKey) |     public String selectConfigByKey(String configKey) | ||||||
|     { |     { | ||||||
|         SysConfig config = new SysConfig(); |         SysConfig config = new SysConfig(); | ||||||
|         config.setConfigKey(configKey); |         config.setConfigKey(configKey); | ||||||
|   | |||||||
| @@ -2,11 +2,14 @@ package com.ruoyi.project.system.service.impl; | |||||||
|  |  | ||||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||||
| import java.util.List; | import java.util.List; | ||||||
|  | import org.slf4j.Logger; | ||||||
|  | import org.slf4j.LoggerFactory; | ||||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||||
| import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||||
| import org.springframework.transaction.annotation.Transactional; | import org.springframework.transaction.annotation.Transactional; | ||||||
| import com.ruoyi.common.constant.UserConstants; | import com.ruoyi.common.constant.UserConstants; | ||||||
| import com.ruoyi.common.exception.CustomException; | import com.ruoyi.common.exception.CustomException; | ||||||
|  | import com.ruoyi.common.utils.SecurityUtils; | ||||||
| import com.ruoyi.common.utils.StringUtils; | import com.ruoyi.common.utils.StringUtils; | ||||||
| import com.ruoyi.framework.aspectj.lang.annotation.DataScope; | import com.ruoyi.framework.aspectj.lang.annotation.DataScope; | ||||||
| import com.ruoyi.project.system.domain.SysPost; | import com.ruoyi.project.system.domain.SysPost; | ||||||
| @@ -19,6 +22,7 @@ import com.ruoyi.project.system.mapper.SysRoleMapper; | |||||||
| import com.ruoyi.project.system.mapper.SysUserMapper; | import com.ruoyi.project.system.mapper.SysUserMapper; | ||||||
| import com.ruoyi.project.system.mapper.SysUserPostMapper; | import com.ruoyi.project.system.mapper.SysUserPostMapper; | ||||||
| import com.ruoyi.project.system.mapper.SysUserRoleMapper; | import com.ruoyi.project.system.mapper.SysUserRoleMapper; | ||||||
|  | import com.ruoyi.project.system.service.ISysConfigService; | ||||||
| import com.ruoyi.project.system.service.ISysUserService; | import com.ruoyi.project.system.service.ISysUserService; | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -29,6 +33,8 @@ import com.ruoyi.project.system.service.ISysUserService; | |||||||
| @Service | @Service | ||||||
| public class SysUserServiceImpl implements ISysUserService | public class SysUserServiceImpl implements ISysUserService | ||||||
| { | { | ||||||
|  |     private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class); | ||||||
|  |  | ||||||
|     @Autowired |     @Autowired | ||||||
|     private SysUserMapper userMapper; |     private SysUserMapper userMapper; | ||||||
|  |  | ||||||
| @@ -44,6 +50,9 @@ public class SysUserServiceImpl implements ISysUserService | |||||||
|     @Autowired |     @Autowired | ||||||
|     private SysUserPostMapper userPostMapper; |     private SysUserPostMapper userPostMapper; | ||||||
|  |  | ||||||
|  |     @Autowired | ||||||
|  |     private ISysConfigService configService; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 根据条件分页查询用户列表 |      * 根据条件分页查询用户列表 | ||||||
|      *  |      *  | ||||||
| @@ -375,4 +384,72 @@ public class SysUserServiceImpl implements ISysUserService | |||||||
|         } |         } | ||||||
|         return userMapper.deleteUserByIds(userIds); |         return userMapper.deleteUserByIds(userIds); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 导入用户数据 | ||||||
|  |      *  | ||||||
|  |      * @param userList 用户数据列表 | ||||||
|  |      * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 | ||||||
|  |      * @param operName 操作用户 | ||||||
|  |      * @return 结果 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName) | ||||||
|  |     { | ||||||
|  |         if (StringUtils.isNull(userList) || userList.size() == 0) | ||||||
|  |         { | ||||||
|  |             throw new CustomException("导入用户数据不能为空!"); | ||||||
|  |         } | ||||||
|  |         int successNum = 0; | ||||||
|  |         int failureNum = 0; | ||||||
|  |         StringBuilder successMsg = new StringBuilder(); | ||||||
|  |         StringBuilder failureMsg = new StringBuilder(); | ||||||
|  |         String password = configService.selectConfigByKey("sys.user.initPassword"); | ||||||
|  |         for (SysUser user : userList) | ||||||
|  |         { | ||||||
|  |             try | ||||||
|  |             { | ||||||
|  |                 // 验证是否存在这个用户 | ||||||
|  |                 SysUser u = userMapper.selectUserByUserName(user.getUserName()); | ||||||
|  |                 if (StringUtils.isNull(u)) | ||||||
|  |                 { | ||||||
|  |                     user.setPassword(SecurityUtils.encryptPassword(password)); | ||||||
|  |                     user.setCreateBy(operName); | ||||||
|  |                     this.insertUser(user); | ||||||
|  |                     successNum++; | ||||||
|  |                     successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 导入成功"); | ||||||
|  |                 } | ||||||
|  |                 else if (isUpdateSupport) | ||||||
|  |                 { | ||||||
|  |                     user.setUpdateBy(operName); | ||||||
|  |                     this.updateUser(user); | ||||||
|  |                     successNum++; | ||||||
|  |                     successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功"); | ||||||
|  |                 } | ||||||
|  |                 else | ||||||
|  |                 { | ||||||
|  |                     failureNum++; | ||||||
|  |                     failureMsg.append("<br/>" + failureNum + "、账号 " + user.getUserName() + " 已存在"); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             catch (Exception e) | ||||||
|  |             { | ||||||
|  |                 failureNum++; | ||||||
|  |                 String msg = "<br/>" + failureNum + "、账号 " + user.getUserName() + " 导入失败:"; | ||||||
|  |                 failureMsg.append(msg + e.getMessage()); | ||||||
|  |                 log.error(msg, e); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         if (failureNum > 0) | ||||||
|  |         { | ||||||
|  |             failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); | ||||||
|  |             throw new CustomException(failureMsg.toString()); | ||||||
|  |         } | ||||||
|  |         else | ||||||
|  |         { | ||||||
|  |             successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); | ||||||
|  |         } | ||||||
|  |         return successMsg.toString(); | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 RuoYi
					RuoYi