项目介绍:标注分析系统

主要功能:对上传的EXCEL文件进行解析,进行一些CRUD操作。

主要难点:

1.excel文件上传

使用sheetjs插件读取excel文件

/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
var file = $("#dataList").get(0).files[0];
var reader = new FileReader();
reader.onload = function(e){var data = e.target.result;var workbook = XLSX.read(data, {type : 'binary'});var sheet = workbook.Sheets[workbook.SheetNames[0]];var rowList = XLSX.utils.sheet_to_json(sheet);//这样excel的第一行就变成了JSON的key,底下的每行就是value//但如何给这些key取别名还不会,这样excel的第一行就可以使用复杂文本了
}

2.导出txt文件

//发送Response
private void setResponseHeader(HttpServletResponse response, String fileName) {try {try {fileName = new String(fileName.getBytes(),"ISO8859-1");} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}response.setContentType("application/octet-stream;charset=ISO8859-1");response.setHeader("Content-Disposition", "attachment;filename="+ fileName);response.addHeader("Pargam", "no-cache");response.addHeader("Cache-Control", "no-cache");} catch (Exception ex) {ex.printStackTrace();}
}//导出txt
public void exportTxt() throws IOException {String missionCode = getParam("missionCode");String txtName = missionCode + ".txt";//获取需要导出的listtry {this.setResponseHeader(getRes(), txtName);OutputStream out = getRes().getOutputStream();for (int i = 0; i < list.size(); i++) {String str1 = list.get(i) + "\t\t\t";out.write(str1.getBytes());}out.flush();out.close();} catch (IOException e) {e.printStackTrace();}
}//导出成excel文件也类似
public void exportExcel(){String excelName = "excel.xlsx";String sheetName = "sheet0";String[] title = {"批次号", "问法", "推荐问题", "状态"};//把要导出的数据写成二维数组的形式,使用ExcelUtil工具类方便导出XSSFWorkbook workbook = ExcelUtil.getWorkbook(sheetName, title, content);XSSFSheet sheet = workbook.getSheetAt(0);//设置excel样式sheet.setColumnWidth(0, 25*255);sheet.setColumnWidth(1, 55*255);sheet.setColumnWidth(2, 45*255);sheet.setColumnWidth(3, 15*255);OutputStream outputStream = null;try {this.setResponseHeader(getRes(), excelName);outputStream = getRes().getOutputStream();workbook.write(outputStream);outputStream.flush();} catch (IOException e) {e.printStackTrace();} finally {if(outputStream != null) {try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}}
}//ExcelUtil工具类,把二维数组转化成XSSFWorkbook
public class ExcelUtil {public static XSSFWorkbook getWorkbook(String sheetName, String[] title, String[][] content){XSSFWorkbook workbook = new XSSFWorkbook();XSSFSheet sheet = workbook.createSheet(sheetName);XSSFCellStyle style = workbook.createCellStyle();style.setAlignment(HorizontalAlignment.CENTER);XSSFRow titleRow = sheet.createRow(0);for (int i = 0; i < title.length; i++) {XSSFCell cell = titleRow.createCell(i);cell.setCellValue(title[i]);cell.setCellStyle(style);}for (int i = 0; i < content.length; i++) {XSSFRow row = sheet.createRow(i+1);for (int j = 0; j < content[i].length; j++) {XSSFCell cell = row.createCell(j);cell.setCellValue(content[i][j]);cell.setCellStyle(style);}}return workbook;}
}

项目缺点:

1.最大的败笔是数据库中设计了存放当前任务的总条数、已打标条数,每次打标、删除、导入都会改变一次这些状态,遇到一些异常情况非常容易出错。后期需求有改变的时候往往要直接操作线上数据库,也容易使这些状态数据对不上实际。最开始设计成这样主要是想做进度条的时候可以直接做成marked_size/total_size,每次操作也可以不用每次都select count(*),而是标注的时候在前端改数字在后台给marked_size加1,实际上导致了后期维护起来非常麻烦,出异常的时候几乎是必对不上数字。以后这种频繁变化的状态属性一定不要存起来,而是每次用到去查询一下。

2.项目使用了大量的ajax套ajax,其实可以全部在一个ajax里判断,这么写就像if里套if一样显得臃肿。根本原因还是export层很少使用Map<String, Object>这种通用的返回类型,而是用的都是String, List这种只能返回一类结果的类型,导致我需要使用多个ajax来获取数据。

项目经验:

作为从0开始的第一个Java项目,我逐渐理解了MVC设计模式。在开发系统的时候,不能完全按照产品经理的要求面向产品经理编程,而是要站在用户的角度,不断思考怎样使用这个系统的人更便利,在这个基础上可以增加用户需要的功能,甚至删除用户不需要的功能,因为产品经理往往也不能一开始就构思好全部细节。最后,我一定要感谢工作中帮助过我的领导和小伙伴,没有他们的帮忙我应该永远也做不成这个简单到批爆的CRUD,不管他们是不是老恶心棱(嘿嘿)

入职第一个CRUD项目小结相关推荐

  1. 呆呆和你谈谈入职CVTE一个月的感受

    呆呆和你谈谈入职CVTE一个月的感受 你盼世界,我盼望你无bug.Hello 大家好!我是霖呆呆! 啊啊啊啊啊...至6.18日入职新公司CVTE已经一个多月了,在<你盼世界,我盼望你无bug| ...

  2. 2021年入职体检有哪些项目?

    入职体检有哪些项目?入职体检具体要做的检查要根据个人的具体情况而定.入职体检一般有肝功.血糖.血脂.肾功.腹部B超.男性B超.女性B超.血尿常规.肝炎筛查.胸透.心电图.内科.外科.耳鼻喉科检查等.由 ...

  3. 入职外包一个月的感受

    最近会更新一系列关于在外包工作的真实经历和感受的文章,挺多小伙伴都比较感兴趣的.文章内容都来自在外包公司工作的读者的真实经历. 另外,不同的外包公司.不同的外包工作.不同的甲方等等因素都会影响每个人做 ...

  4. 入职微软一个月感悟:微软其实并没有想象的那么轻松

    本文是云峰入职微软一月后的感悟,谈及了他的面经以及入职体验. 前言 提到微软,你首先会想到什么?外企?Windows Or Office?还是 955·WLB? 我在前司待了快三年,自觉到了一个打工人 ...

  5. 离谱!入职 BYD 一个月,心态崩了。。。

    关注.星标公众号,直达精彩内容 来源:https://www.nowcoder.com/discuss/444560312508989440 这是一位入职 BYD 读者的心得分享.写的巨真实,他本来是 ...

  6. 离谱!入职BYD一个月,心态崩了。。。

    这是一位入职 BYD 读者的心得分享.写的巨真实,他本来是前端开发,结果被调到硬件岗位,整个过程一言难尽. 下文中的"我"代表这位学弟本人. 整理编辑:拓跋阿秀 https://w ...

  7. 离谱!入职BYD一个月,我算是开眼了

    上一篇:铁饭碗也不铁了 这是一位入职BYD读者的心得分享. 去年校招寒冬很多人都收到BYD的offer,看多了把BYD当爷爷拜的分享了,这里我就做个坏人来泼盆冷水. 以下情况仅仅适用于我从同部门同事和 ...

  8. 入职以来一个月的心得体悟

    自7.20入职也有一个月了,这一个月之间身份自然也从学生摇身一变成为一名coder,然而一个月的时间还不足以使自己成为一名合格的coder,这一个月的时间内我从安卓的Java基础知识看起知道安卓的一些 ...

  9. 入职阿里一个月被迫转Android...

    大家好,我是会 Android 的程序员小菜鸡大海 . 有些同学问我,大海,你到底是写 c++ 的,还是写 Android 的. 不小心暴露自己了.两个语言我都略懂皮毛哈哈. 给大家说明下,我实习和阿 ...

最新文章

  1. C语言获得数组长度的函数
  2. 201521123011《Java程序设计》第6周学习总结
  3. 360不用卸,照样上你QQ
  4. 基于@Bean声明lazy-queue
  5. 超文本引用href的几种用法
  6. WPF布局控件AvalonDock介绍以及应用中遇到的一个问题
  7. 我的世界服务器传送系统,我的世界多人服务器任何人都没权限了 不能回主城 不能传送 等等...
  8. 文件创建失败 无法继续下载_iOS更新失败了怎么办?教你如何排除故障解决问题...
  9. 计算机学霸小黄是谁,人人网惊现“小黄鸡”火成一片 大学生调侃“你是学霸派来的么?”...
  10. Windows重装系统+虚拟机virtuabox安装+ubuntu系统安装+linux环境下安装fsl 一条龙(步步亲测有效)
  11. 派森小镇(二)神奇能量药丸
  12. 苹果cms的php.ini,苹果cms伪静态设置教程
  13. Java 实现天气预报
  14. 【音频处理】音高 与 频率 对照表 ( 音符频率算法 )
  15. python动画简单_Python 使用 pygame 实现一个简单的动画
  16. android 调用相机并获取图片地址,Android 7.0使用FileProvider获取相机拍照的图片路径...
  17. JWT实战 Spring Security Oauth2整合JWT 整合SSO单点登录
  18. Mutiselect下拉复选框(保存和设置默认选中项)
  19. 六自由度机器人(机械臂)运动学建模及运动规划系列——避障路径规划算法补充:粒子群算法(PSO)
  20. 领跑(LabelPainter)条码标签设计系统优势功能一览

热门文章

  1. 优惠加油系统定制开发卡密
  2. Vue+nodejs+express天天生鲜超市购物商城平台
  3. 通用进制转换工具,可实现进制之间的任意转换
  4. 信用卡客户风险分析与评价
  5. CG资源网站(持续更新)
  6. 插入U盘无反应解决方法
  7. 计算机主机接口有哪些,电脑主机后面的那些插孔,分别是插什么的
  8. QuaggaJS在给定图像中定位条形码的工作原理
  9. 收房入住注意事项及程序
  10. 我与小娜(20):去LIGO,探秘光子接力赛