文件上传和导出

1、导出

/**导出报表*/
	@RequestMapping(value = "/exportExcel", method = RequestMethod.GET)
	public void exportErrorExcel( HttpServletRequest request,HttpServletResponse response) {
		String courseId = request.getParameter("courseId");
		String classId = request.getParameter("classId");
		List<String> classIdStrList = Arrays.asList(classId.split(","));
		List<Long> classIdList = new ArrayList<Long>();
		for (int i=0;i<classIdStrList.size();i++){
			classIdList.add(Long.valueOf(classIdStrList.get(i)));
		}
		List<UserRegister> userRegisters = userRegisterService.findByClassIds(classIdList);
		String loginNames = "";
		for (int i=0;i<userRegisters.size();i++){
			if (i == userRegisters.size()-1){
				loginNames += userRegisters.get(i).getLoginName();
			}else{
				loginNames += userRegisters.get(i).getLoginName()+",";
			}
		}
		//获得的听课详情
		List<Map<String, Object>> courseCountList = new ArrayList<Map<String, Object>>();
		//得到课程Id
		Course course = courseService.load(Long.valueOf(courseId));
		courseCountList = selectCourseStatisticByCourse(course.getCwCourseId(),loginNames,0,0).get("lectureInfoList");
		String fileName = "听课统计.xls";
		ArrayList<ArrayList<String>> datas = new ArrayList<ArrayList<String>>(); //导出的数据集合
		if (courseCountList.size() > 0){
			for (int i=0;i<courseCountList.size();i++){
				ArrayList<String> data = new ArrayList<String>();
				data.add(courseCountList.get(i).get("lectureName").toString());
				data.add(courseCountList.get(i).get("coursewareTime").toString());
				data.add(courseCountList.get(i).get("listenCount").toString());
				data.add(courseCountList.get(i).get("listenRate").toString());
				data.add(courseCountList.get(i).get("averageListenTime").toString());
				data.add(courseCountList.get(i).get("listenCount60").toString());
				data.add(courseCountList.get(i).get("listenCount80").toString());
				data.add(courseCountList.get(i).get("listenCount100").toString());
				datas.add(data);
			}
		}

		ArrayList<String> titles = new ArrayList<String>();
		titles.add("讲次名称");
		titles.add("总时长");
		titles.add("听课人数");
		titles.add("听课率");
		titles.add("平均听课时长");
		titles.add("听课完成率0%-60%人数");
		titles.add("听课完成率60%-80%人数");
		titles.add("听课完成率80%-100%人数");
		ExcelUtils excel = new ExcelUtils(titles,datas);
		try {
			String agent = request.getHeader("User-Agent");
			boolean isMSIE = (agent != null && (agent.indexOf("MSIE") != -1|| agent.indexOf("Trident") != -1));
			//fileName = URLEncoder. encode(fileName, "UTF-8");
			if(isMSIE){ //是IE浏览器
				fileName = URLEncoder.encode(fileName, "UTF-8");
			} else {
				fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");
			}
			response.reset();//清空输出流
			response.setHeader("Content-disposition", "attachment; filename=" +fileName);
			response.setContentType("application/vnd.ms-excel");
			response.setCharacterEncoding("UTF-8");
			excel.exportExcel(response.getOutputStream());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

2、上传

(1)导入controller

/**导入*/
	@RequestMapping(value = "/tofileUploadCommonIndex")
	public String tofileUploadCommonIndex(Model model, HttpServletRequest request) {
		return "modules/userbaseinfo/userBaseInfo_upload";
	}
	/**导入数据*/
	@RequestMapping(value = "/saveUser", method = RequestMethod.POST)
	public String saveUser(@ModelAttribute("UserBaseInfo") UserBaseInfo userBaseInfo, HttpServletRequest request,RedirectAttributes redirectAttributes,Model model) {
		//添加业务逻辑——导入数据
		//得到teacherId
		Object  userIdO =  request.getSession().getAttribute("userId");
		Long userId = Long.valueOf(String.valueOf(userIdO));
		PartnerTeacher partnerTeacher = partnerTeacherService.selectByUserId(userId);
		userBaseInfo.setCreateUser(partnerTeacher.getUserId());
		userBaseInfo.setTeacherId(partnerTeacher.getId());
		userBaseInfo.setPartnerId(partnerTeacher.getPartnerId());
		userBaseInfo.setOrganizationalId(partnerTeacher.getOrganizationalId());
		Map<String, Object> importTeacher = userBaseInfoService.importUser(userBaseInfo);
		redirectAttributes.addFlashAttribute("msg", importTeacher.get("daoru").toString());
		return "redirect:/partnerteacheruser/partnerTeacherUser";
	}
(2)导入service

 @Override
    @Transactional(propagation= Propagation.REQUIRED, isolation= Isolation.READ_COMMITTED,timeout=10)
    public Map<String, Object> importUser(UserBaseInfo userBaseInfo) {
        //删除之前错误信息
        UserBaseInfoFromExcel userBaseInfoFromExcel = new UserBaseInfoFromExcel();
        userBaseInfoFromExcel.setBatchNo("老师导入"+String.valueOf(userBaseInfo.getCreateUser()));
        userBaseInfoFromExcel.setPartnerId(userBaseInfo.getPartnerId());
        List<UserBaseInfoFromExcel> uList = userBaseInfoFromExcelMapper.selectError(userBaseInfoFromExcel);
        if (uList.size()>0){
            for (UserBaseInfoFromExcel userBaseInfoFromExcel1:uList
                    ) {
                userBaseInfoFromExcel1.setIsValid(IS_VALID.NO.getValue());
                userBaseInfoFromExcel1.setUpdateUser(userBaseInfo.getCreateUser());
                userBaseInfoFromExcel1.setUpdateDate(new Date());
                userBaseInfoFromExcelMapper.update(userBaseInfoFromExcel1);
            }
        }
        //excel中数据放入columnIndexPropertyNameMap中
        String[] array = userBaseInfo.getImportExceForBath().split("/");
        String fileName = array[array.length - 1];
        String fileUrl = FileUploadConstants.getPropValue("FILE_PATH_EXCEL") + File.separator + fileName;
        ImportDataUtil i = new ImportDataUtil(fileUrl);
        LinkedHashMap<Integer, String> columnIndexPropertyNameMap = new LinkedHashMap<>();
        columnIndexPropertyNameMap.put(0, "realName");
        columnIndexPropertyNameMap.put(1, "studentNum");
        columnIndexPropertyNameMap.put(2, "mobilephone");

        List<?> excelList = i.makeRelationShip("com.dongao.modules.userbaseinfo.model.UserBaseInfo", columnIndexPropertyNameMap);
        Map<String,Object> map = new HashMap<String,Object>(); //返回数据
        int count = 0; // 成功导入条数
        int errorCount = 0; // 错误数据条数
        if (excelList.size() > 0 ){
            for (int j = 0; j < excelList.size(); j++) {
                StringBuilder checkMsg = new StringBuilder();
                StringBuilder info = new StringBuilder(); //条目
                UserBaseInfo excelData = (UserBaseInfo)excelList.get(j); //读取一行
                //过滤空行
                if(StringUtils.isBlank(excelData.getRealName())&&StringUtils.isBlank(excelData.getStudentNum())&&StringUtils.isBlank(excelData.getMobilephone())){
                    continue;//不可见字符过滤
                }
                if(StringUtils.isBlank(excelData.getRealName())){
                    checkMsg.append("姓名不能为空 /");
                }else{
                }

                if(StringUtils.isBlank(excelData.getStudentNum())){
                    checkMsg.append("学号不能为空 /");
                }else{
                    UserBaseInfo userBaseInfo1 = new UserBaseInfo();
                    userBaseInfo1.setStudentNum(excelData.getStudentNum());
                    UserBaseInfo userBaseInfo2= userBaseInfoMapper.findByObj(userBaseInfo1);
                    if (userBaseInfo2 != null) {
                        checkMsg.append("学号重复 /");
                    }
                }
                if (StringUtils.isNotBlank(excelData.getMobilephone())){
                    boolean bl = isMobilePhoneLegal(excelData.getMobilephone());
                    if (false == bl){
                        checkMsg.append("手机号格式错误/");
                    }
                }
                if (StringUtils.isNotBlank(String.valueOf(checkMsg))) {
                    //数据插入da_edu_user_base_info_from_excel表
                    UserBaseInfoFromExcel userBaseInfoFromExcel2 = new UserBaseInfoFromExcel();
                    userBaseInfoFromExcel2.setRealName(excelData.getRealName());
                    userBaseInfoFromExcel2.setStudentNum(excelData.getStudentNum());
                    if (StringUtils.isNotBlank(excelData.getMobilephone())){
                        userBaseInfoFromExcel2.setMobilephone(excelData.getMobilephone());
                    }
                    userBaseInfoFromExcel2.setBatchNo("老师导入"+String.valueOf(userBaseInfo.getCreateUser()));//错误标记
                    userBaseInfoFromExcel2.setNoPassReason(checkMsg.toString());
                    userBaseInfoFromExcel2.setPartnerId(userBaseInfo.getPartnerId());
                    userBaseInfoFromExcel2.setIsValid(IS_VALID.YES.getValue());
                    userBaseInfoFromExcel2.setCreateUser(userBaseInfo.getCreateUser());
                    userBaseInfoFromExcel2.setCreateDate(new Date());
                    userBaseInfoFromExcelMapper.insert(userBaseInfoFromExcel2);
                    errorCount++;
                } else {
                    //数据插入da_edu_user_register表
                    UserRegister userRegister = new UserRegister();
                    userRegister.setLoginName(excelData.getStudentNum());
                    //默认密码123456
                    String salt = createSalt();//获取随机的盐值
                    String password= new KeyBean().getkeyBeanofStr(salt+Constants.PASSWORD);
                    userRegister.setSalt(salt);
                    userRegister.setPassword(password);
                    userRegister.setStatus(Constants.Status.START.getValue());
                    userRegister.setType(Constants.REGISTER_TYPE.BATCH.getValue());
                    userRegister.setUserRole(Constants.USER_ROLE.STUDENT.getValue());
                    userRegister.setIsValid(IS_VALID.YES.getValue());
                    userRegister.setCreateUser(userBaseInfo.getCreateUser());
                    userRegister.setCreateDate(new Date());
                    userRegisterMapper.insert(userRegister);
                    //数据插入da_edu_user_base_info表
                    UserRegister userRegister1 = userRegisterMapper.loadUserRegisterByLoginName(excelData.getStudentNum());
                    UserBaseInfo userBaseInfo1 = new UserBaseInfo();
                    userBaseInfo1.setUserId(userRegister1.getId());
                    userBaseInfo1.setLoginName(userRegister1.getLoginName());
                    userBaseInfo1.setRealName(excelData.getRealName());
                    userBaseInfo1.setStudentNum(excelData.getStudentNum());
                    if (StringUtils.isNotBlank(excelData.getMobilephone())){
                        userBaseInfo1.setMobilephone(excelData.getMobilephone());
                    }
                    userBaseInfo1.setOrganizationalId(userBaseInfo.getOrganizationalId());
                    userBaseInfo1.setPartnerId(userBaseInfo.getPartnerId());
                    userBaseInfo1.setCreateUser(userBaseInfo.getCreateUser());
                    userBaseInfo1.setOrigin(Constants.ORIGIN.BATCH.getValue());
                    this.save(userBaseInfo1);


                    //数据插入da_edu_partner_teacher_user表
                    PartnerTeacherUser partnerTeacherUser = new PartnerTeacherUser();
                    partnerTeacherUser.setTeacherId(userBaseInfo.getTeacherId());

                    partnerTeacherUser.setUserId(userRegister1.getId());
                    partnerTeacherUser.setCreateUser(userBaseInfo.getCreateUser());
                    partnerTeacherUser.setCreateDate(new Date());
                    partnerTeacherUser.setIsValid(IS_VALID.YES.getValue());
                    partnerTeacherUserMapper.insert(partnerTeacherUser);
                    count++;
                }
            }

            map.put("daoru", "成功导入:" + count + "条。   错误的有:" + errorCount +"条。");
        }else {
            map.put("daoru", "表格中无数据,请重新导入!");
        }
        return map;

    }
    /**
     * 生成salt
     *
     * @param
     * @return
     */
    private String createSalt() {
        String salt = "";
        salt += (int) (Math.random() * 9 + 1);
        for (int i = 0; i < 5; i++) {
            salt += (int) (Math.random() * 10);
        }
        return salt;
    }
    /**手机号格式验证**/
    public static boolean isMobilePhoneLegal(String str) throws PatternSyntaxException {
        String regExp = "^((13[0-9])|(15[^4])|(18[0,2,3,5-9])|(17[0-8])|(147))\\d{8}$";
        Pattern p = Pattern.compile(regExp);
        Matcher m = p.matcher(str);
        return m.matches();
    }
(3)导入页面

<style>
    .manage_add{
        margin-left: 100px;

    }
    .Validform_checktip{
        margin-left:0px;
    }
    .ass_div{
        width: 382px;
    }
</style>
<div class="manage_add">
    <form class="addForm" target="_parent" id="userBaseInfoImportForm" action="${request.getContextPath()}/userbaseinfo/userBaseInfo/saveUser" method="post">
        <div class="ass_div clearfix" >
            <p class="fl">导入学员:</p>
            <input type="hidden" name="importExceForBath" id="importExceForBath" value="" datatype="*" nullmsg="请上传文件!" errormsg="请上传文件!"/>
            <span class="Validform_checktip" ></span>
            <iframe scrolling="no" src="${request.getContextPath()}/uploadfile/uploadFile/uploadFileData?filePath=FILE_PATH_EXCEL&type=*.EXCEL&dom=importExceForBath&fileCategory=importUser"  id="main" frameborder="0" width="350" height="100">
            </iframe>
        </div>
        <div class="ass_div clearfix">
            <span class="Validform_checktip" ></span>
        </div>
        <div class="clearfix copy_btns" >
            <td colspan="3" >
                <p class="btn fl y_btn" type="button" id="saveBtn">保存</p>
                <p type="button" class="btn fl g_btn" >取消</p>
            </td>
        </div>

    </form>
</div>
<script type="text/javascript">
    $(function(){
        $('#userBaseInfoImportForm').Validform({
            btnSubmit:"#saveBtn",
            tiptype:2,
            showAllError:true
        });
        $('.chosen').chosen({
            "no_results_text":'未找到匹配数据!',
            "width":"120px",
            "allow_single_deselect":true
        });
        $('#cancelBtn').click(function(){
            parent.jBox.close(true);
        });
    });
</script>

(4)导入插件(存放在百度云中layui)

@RequestMapping(value = {"/uploadFileData"}, method = {RequestMethod.GET,RequestMethod.POST})
	public String uploadFileData(Model model, HttpServletRequest request) {
		//TODO...
		String filePath = request.getParameter("filePath");
		String type = request.getParameter("type");
		String dom = request.getParameter("dom");
		String imgSrc = request.getParameter("imgSrc");
		String saveFilePath = FileUploadConstants.getPropValue(filePath);
		String fileCategory = request.getParameter("fileCategory");//文件存储所在文件夹,回显路径=基路径+该文件夹

		String url=Constants.FIlE_BASE_URL + fileCategory+"/";

		request.setAttribute("filePath",filePath);
		request.setAttribute("type",type);
		request.setAttribute("dom",dom);
		request.setAttribute("imgSrc",imgSrc);
		request.setAttribute("saveFilePath",saveFilePath);
		request.setAttribute("url",url);
		HttpSession session = request.getSession();
		if(session !=null){
			request.setAttribute("jsessionid", session.getId());
		}
		return "modules/send/send2";

<html>
<head>
    <meta charset="utf-8">
    <title>layui</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="${request.getContextPath()}/layui/css/layui.css"  media="all">
</head>
<body>

<div class="layui-upload">
    <input type="hidden" name="extname" id="extname" value="${extname}"/>
    <input type="hidden" name="filename" id="filename" value="${filename}"/>
    <input type="hidden" name="filePath" id="filePath" value="${filePath}"/>
    <input type="hidden" name="saveFilePath" id="saveFilePath"  value="${saveFilePath}"/>
    <input type="hidden" name="proVal" id="proVal" value="${filePath}" />
    <input type="hidden" name="jsessionid" id="jsessionid" value="${jsessionid}" />
    <button type="button" class="layui-btn layui-btn-danger" id="test1"><i class="layui-icon"></i>上传文件</button>
<#-- <#if type?? && type == "*.JPG" >
 <div class="layui-upload-list">
     <blockquote class="layui-elem-quote" style="margin-top: 10px;">
         <img src="http://static.dongao.com/image/no_photo.jpg" class="layui-upload-img" id="imgSrc" width="100px" height="100px">
         <p id="demoText"></p>
     </blockquote>
 </div>
 </#if>-->
</div>

<script src="${request.getContextPath()}/layui/layui.all.js" charset="utf-8"></script>
<!-- 注意:如果你直接复制所有代码到本地,上述js路径需要改成你本地的 -->
<script>
    layui.use('upload', function(){
        var $ = layui.jquery,upload = layui.upload;
        //上传

        var type = "${type}";
        var desc = '';
        var pic = 'gif|jpg|jpeg|bmp|png';
        var doc = 'doc|docx|xls|xlsx|pdf';
        var exceltype='xls|xlsx';
        if(type != '' && type.toLocaleUpperCase() =='*.CSS'){
            desc='css|CSS';
        }else if(type != '' && type.toLocaleUpperCase()=='*.JPG'){
            desc=pic;
        }else if(type != '' && type.toLocaleUpperCase() =='*.FTL'){
            desc='ftl';
        }else if(type != '' && type.toLocaleUpperCase() =='*.EXCEL'){
            desc=exceltype;
        }else if(type != '' && type.toLocaleUpperCase() =='*.JS'){
            desc='js|JS';
        }
        var uploadInst = upload.render({
            elem: '#test1'
            ,accept: 'file'
            ,exts: desc
            ,url: '${request.getContextPath()}/js/utils/expupload/upload.jsp;jsessionid=${jsessionid}?filetype='+$('#extname').val()+'&proVal='+$('#proVal').val()+'&filename='+$('#filename').val()
            ,before: function(obj){
                //预读本地文件示例,不支持ie8
                layer.load(); //上传loading
                obj.preview(function(index, file, result){
                    $('#imgSrc').attr('src', result); //图片链接(base64)
                });
            }
            ,done: function(res){
                //如果上传失败
                if(res.code == 0){
                    layer.closeAll('loading'); //关闭loading
                    return layer.msg('上传失败');
                }else{
                    layer.closeAll('loading'); //关闭loading
                    $($(window.parent.document).find("input[name='${dom}']")[0]).attr("value", '${url}'+trim(res.name));
                    $($(window.parent.document).find("img[id='${imgSrc}']")).attr("src", '${url}'+trim(res.name));
                    return layer.msg('上传成功');
                }
                //上传成功
            }
            ,error: function(){
                //演示失败状态,并实现重传
                var demoText = $('#demoText');
                demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-mini demo-reload">重试</a>');
                demoText.find('.demo-reload').on('click', function(){
                    uploadInst.upload();
                });
            }
        });
    });

    function trim(str){
        return str.replace(/(^\s*)|(\s*$)/g, "");
    }
</script>

</body>
</html>


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值