龚焕茏
2024-07-22 d5a2ec36fa56559a364e1a60c4b75c707cb7463a
feat:用户导入
3个文件已修改
1个文件已添加
144 ■■■■ 已修改文件
src/main/java/com/ycl/jxkg/controller/admin/UserController.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/domain/vo/admin/user/UserExcelVo.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/service/UserService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/service/impl/UserServiceImpl.java 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/controller/admin/UserController.java
@@ -1,32 +1,36 @@
package com.ycl.jxkg.controller.admin;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.github.pagehelper.PageInfo;
import com.ycl.jxkg.base.BaseApiController;
import com.ycl.jxkg.base.Result;
import com.ycl.jxkg.base.SystemCode;
import com.ycl.jxkg.context.WebContext;
import com.ycl.jxkg.domain.form.UpdatePwdForm;
import com.ycl.jxkg.enums.RoleEnum;
import com.ycl.jxkg.domain.other.KeyValue;
import com.ycl.jxkg.domain.entity.User;
import com.ycl.jxkg.domain.entity.UserEventLog;
import com.ycl.jxkg.enums.UserStatusEnum;
import com.ycl.jxkg.domain.other.KeyValue;
import com.ycl.jxkg.domain.vo.StudentVO;
import com.ycl.jxkg.domain.vo.admin.user.*;
import com.ycl.jxkg.enums.RoleEnum;
import com.ycl.jxkg.enums.UserStatusEnum;
import com.ycl.jxkg.service.AuthenticationService;
import com.ycl.jxkg.service.UserEventLogService;
import com.ycl.jxkg.service.UserService;
import com.ycl.jxkg.utils.DateTimeUtil;
import com.ycl.jxkg.domain.vo.admin.user.*;
import com.ycl.jxkg.utils.PageInfoHelper;
import com.github.pagehelper.PageInfo;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
@@ -176,7 +180,21 @@
        return Result.ok(keyValues);
    }
    @GetMapping("importTemplate")
    @SneakyThrows
    public void importTemplate(HttpServletResponse response) {
        List<UserExcelVo> list = new ArrayList<>();
        list.add(new UserExcelVo().setUserName("zhangSan").setPassword("123456").setRealName("张三").setSex(1).setRole(1).setPhone("12345678901").setAge(24).setBirthDay("2000-01-01"));
        ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), UserExcelVo.class).build();
        WriteSheet writeSheet = EasyExcel.writerSheet(0, "用户信息").build();
        excelWriter.write(list, writeSheet);
        excelWriter.finish();
    }
    @PostMapping("import")
    public Result<String> importExcel(MultipartFile file) {
        return Result.ok(userService.importExcel(file));
    }
}
src/main/java/com/ycl/jxkg/domain/vo/admin/user/UserExcelVo.java
New file
@@ -0,0 +1,42 @@
package com.ycl.jxkg.domain.vo.admin.user;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.Data;
import lombok.experimental.Accessors;
/**
 * @author gonghl
 */
@Data
@Accessors(chain = true)
@ColumnWidth(20)
public class UserExcelVo {
    @ExcelProperty("用户名")
    private String userName;
    @ExcelIgnore
    private String password;
    @ExcelProperty("真实姓名")
    private String realName;
    @ExcelProperty("年龄")
    private Integer age;
    @ExcelProperty("1.男 2女")
    private Integer sex;
    @ExcelProperty("出生日期")
    private String birthDay;
    @ExcelProperty("手机号")
    private String phone;
    @ExcelProperty("1.学生  2.老师")
    private Integer role;
}
src/main/java/com/ycl/jxkg/service/UserService.java
@@ -9,6 +9,7 @@
import com.ycl.jxkg.domain.vo.StudentVO;
import com.ycl.jxkg.domain.vo.admin.user.UserPageRequestVO;
import com.github.pagehelper.PageInfo;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@@ -165,4 +166,12 @@
     *
     */
    void updateStudentPassword(StudentUpdatePwdForm form);
    /**
     * 导入excel
     *
     * @param file file
     * @return 结果
     */
    String importExcel(MultipartFile file);
}
src/main/java/com/ycl/jxkg/service/impl/UserServiceImpl.java
@@ -1,34 +1,38 @@
package com.ycl.jxkg.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.read.listener.PageReadListener;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qiniu.util.Md5;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycl.jxkg.domain.entity.User;
import com.ycl.jxkg.domain.entity.UserEventLog;
import com.ycl.jxkg.domain.form.RegisterForm;
import com.ycl.jxkg.domain.form.StudentUpdatePwdForm;
import com.ycl.jxkg.domain.form.UpdatePwdForm;
import com.ycl.jxkg.enums.RoleEnum;
import com.ycl.jxkg.enums.UserStatusEnum;
import com.ycl.jxkg.domain.form.RegisterForm;
import com.ycl.jxkg.domain.other.KeyValue;
import com.ycl.jxkg.domain.vo.StudentVO;
import com.ycl.jxkg.enums.general.YesOrNoEnum;
import com.ycl.jxkg.domain.vo.admin.user.UserExcelVo;
import com.ycl.jxkg.domain.vo.admin.user.UserPageRequestVO;
import com.ycl.jxkg.enums.RoleEnum;
import com.ycl.jxkg.enums.UserStatusEnum;
import com.ycl.jxkg.event.OnRegistrationCompleteEvent;
import com.ycl.jxkg.event.UserEvent;
import com.ycl.jxkg.exception.BusinessException;
import com.ycl.jxkg.domain.entity.User;
import com.ycl.jxkg.event.OnRegistrationCompleteEvent;
import com.ycl.jxkg.mapper.UserMapper;
import com.ycl.jxkg.service.AuthenticationService;
import com.ycl.jxkg.service.UserService;
import com.ycl.jxkg.domain.vo.admin.user.UserPageRequestVO;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.beans.BeanUtils;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.nio.charset.StandardCharsets;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
@@ -216,4 +220,37 @@
            throw new RuntimeException("旧密码错误,请确认后重新输入");
        }
    }
    @Override
    @SneakyThrows
    @Transactional
    public String importExcel(MultipartFile file) {
        List<User> userList = new ArrayList<>();
        List<String> errorList = new ArrayList<>();
        EasyExcel.read(file.getInputStream(), UserExcelVo.class, new PageReadListener<UserExcelVo>(dataList -> {
            dataList.forEach(item -> {
                User user = new User();
                user.setUserName(item.getUserName());
                user.setPassword(authenticationService.pwdEncode("!Password123456789"));
                user.setRealName(item.getRealName());
                user.setSex(item.getSex());
                user.setPhone(item.getPhone());
                try {
                    user.setBirthDay(new SimpleDateFormat("yyyy-MM-dd").parse(item.getBirthDay()));
                } catch (ParseException e) {
                    errorList.add(item.getRealName());
                }
                user.setAge(item.getAge());
                user.setRole(item.getRole());
                user.setStatus(UserStatusEnum.Enable.getCode());
                userList.add(user);
            });
        }));
        if (!errorList.isEmpty()) {
            return "以下数据日期格式错误:\\n" + String.join(",", errorList);
        } else {
            saveBatch(userList);
        }
        return "成功导入" + userList.size() + "条数据";
    }
}