前一篇文章我们写了Service层,这篇文章我们写一下Action层. 实现的功能: 1:我们先下载模板:然后按照模板里面的规则,插入数据.比如存在d盘. 2:然后浏览找到那个文件,上传上去. 然后把excel中数据都插入到数据库.    ---------------------------------------------------------------------------------------------------       我们之前在写导入功能的时候,已经写过了YpxxA…
我们要实现的效果:     进入到这个页面后,输入要查询的条件,查询出药品表的数据,然后按下导出按钮 ,就会在服务器的一个目录下生成一个药品表的excel表格.  点击"导出"之后: 点击下载就能下载Excel表格,实现导出功能.       讲解如下:   还是分为三层: 1:Dao层     我们先看sql语句. 在PL/SQL写sql: select id, bm, mc, jx, gg, zhxs, scqymc, spmc,jyzt, zbjg, ('and dictinfo…
我们使用的是.10版本 Apache POI - the Java API for Microsoft Documents,Apache POI 是用Java编写的免费开源的跨平台的 Java API,它可以创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API.用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Java读取和创建MS Word和MSPowerPoint文件.Apache POI…
资源全部来源于传智播客. 好的架构师写的程序,就算给刚入门的新手看,新手一看就知道怎么去用.所以我们要对XSSF导出excel类进行封装.这是架构师的工作,但我们也要知道. 我们写一个封装类: 这个类单独有自己的main函数. 我们进入main函数一步一步看: public static void main(String[] args) throws Exception { /** 导出文件存放物理路径 * @param fileWebPath * 导出文件web下载路径 * @param fi…
这个导入功能要实现的效果是: 思路是: 因为我们最后是在Action层中调用的HxlsRead工具,这个工具传入的就是我们要实现的上一篇文章说到的实现了HxlsOptRowsInterface接口的类.所以我们的Server层的类直接去继承HxlsOptRowsInterface接口.然后把这个Service传入到Action中HxlsRead工具中,的这篇文章说的就是Service 层: 代码如下: package yycg.business.service.impl; import java…
上一篇文章提过,HSSF的用户模式会导致读取海量数据时很慢,所以我们采用的是事件驱动模式.这个模式类似于xml的sax解析.需要实现一个接口,HSSFListener接口. 原理:根据excel底层存储(07以版本采用xml存储,以下版本采用二进制)标签决定事件出发点. 目标:在解析完一行(row)数据时进行触发. 优点:读取大数据时,不会导致内存溢出 缺点:用户在解析数据时比较困难.读取数据时速度不快的,因为读取数据的同时根据每个标签进行事件触发. HSSF事件驱动读取文件的封装类解析. 主要…
我们之前学习了怎么把数据的数据导出来保存到Excle中,这篇文章我们学习怎么Excel数据导出然后插入到数据库中. 我们先学习HSSF怎么用来导出数据. 看官方教程步骤如下: 第一步: 创建一个workbook //文件输入流 InputStream is = new FileInputStream("d:/test11.xls"); //创建hssf的workbook,将文件流传入workbook HSSFWorkbook hssfWorkbook = new HSSFWorkboo…
我们上上一篇文章(042医疗项目-模块四:采购单模块-采购单明细添加查询,并且把数据添加到数据库中)做的工作是把数据插入到了数据库,我们这篇文章做的是042医疗项目-模块四:采购单模块-采购单明细添加查询,并且把数据添加到数据库中这里没有写采购量,我们这篇文章做的就是把采购量写进入,也就是Updata之前的那个记录.这样采购单里面的记录就完整了. 如下: Dao层:用的是逆向工程生成的:yycgdmxMapper.updateByPrimaryKeySelective(yycgdmx_updat…
这篇文章我们重点介绍Service层.因为Dao层就是用Gysypml逆向生成的Mapper就可以了.所以这里重点讲解Service层. 业务逻辑如下: 1:我们从前端页面传入有两个值:1:usergysid(供应商的id),2:YPPxxID(药品的目录id) 我们看一下我们要插入数据的表: 我们要做的就是把这两个字段插入. 2:我们看这样表的设计: 这里有这么一个约束,那就是YPXXID和USERGYSID两个字段成为一个主键. 我们在Service层应该做的步骤如下: 1:我们根据传入的u…
什么叫做供货商药品目录t添加查询功能?就是说我们前面的博客里面不是说供货商登录后看到了自己供应的药品了么如下: 现在供货商想要往里面添加别的药品,那么这个药品的来源就是卫生局提供的那个Ypxx表(药品总表),我们要显示的就是ypxx表减去我之前添加到.就是我可以添加的药品数据. 如下: 我单击"供应药品添加"来到下面的页面: 这个页面的里面的药品就是我可以添加的.之前的已经存在的药品比如流水号"200211"的药品在这里是找不到的. 上面就是我们要实现的功能. 下面…
我们安装显示的要求: 我们能看到显示的目录里面有:供货企业的名字(这个数据来自于供货商的表[usergys]),流水号,通用名,剂型(这些都来自药品信息表),供货的状态(这个呢在gysypml_control中其实就是一个数字1或者0,但是我们要显示的是正常或者暂停 啊,这样的话这个信息就要查找数据字典表dictinfo才能达到这个功能的 ).... 所以我们在查上面要显示的内容的时候:要关联的表有 gysypml, usergys, gysypml_control, ypxx,dictinfo…
这是医疗项目的第一个模块:做一个用户的查询,可以根据用户的账号,用户的名称,单位的名称,用户的类型去查询.要求效果如下:…
我们之前做的就是采购单的编辑,在采购单里面添加了药品,然后我们这篇文章要做的就是说提交这个采购单. 当我们创建完成采购单,确定采购单不再修改,需要提交采购单,由监管单位进行审核. 我们在提交这个采购单的时候要做一些检验,确保这个采购单是可以被提交的: 1:采购单必须包括采购药品明细方可提交 2:采购单的采购药品明细信息必须完整(采购量.采购金额必须指定) 3:采购单状态为未提交或审核不通过时方可提交 上面的三条都是在Service层里面做的. 当通过上面的验证之后,我们在数据库中做的工作就是更新…
这篇文章我们来讲Action层: 我们先讲开发步骤: 1:我们要根据Service层里面要传的参数,在Action层传入对应的参数. Service层是:public void insertGysympl(String usergysid, String ypxxid) throws Exception 2:我们把从页面传入的多个药品类保存起来,且把选中的行号也得到. 3:捕获插入数据时的异常.并根据异常解析是自定义的异常,还是未知异常,做相应的处理. Action层具体代码如下: /** *…
我们上一篇文章讲了Dao层代码: 这一篇我们讲解Service层和Action层: Service层: 分为接口和实现类,我们主要看实现类:GysemplServiceImpl package yycg.business.service.impl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import yycg.business.dao.mapper.Gysypml…
这个补充知识有一个点很有必要,视屏上的老师提出一点: 内链接关联查询: 如果表A和表B有一个外键关联 ,可以通过外键进行内链接查询 select dictinfo.*, dicttype.typename from dictinfo, dicttype where dictinfo.typecode = dicttype.typecode --不通过外键,通过groupid查询用户类型的代码结果集,只能查询出一条记录,可以使用内链接 select sysuser.*, dictinfo.info…
需求: 我们之前把采购单交给监督单位审核了,审通过的采购单就要受理.供货商决定采购单发不发货. 说明: 我们要查的就是登录的供货商的要提供的采购药品,我们查看的是采购单详细表,至于查询条件我们用的是就是采购单的查询条件,查出来的就是采购单里面的详细采购清单,我们在查询采购单里面的详细清单时是需要有约束条件. 我们设置一个YycgdCust对象.用来做查寻条件用. 如下: 这张单子里面的就是采购单详细表,这儿查出来的数据就只是特定于这个供货商的采购单详细表,一个区域里面只有一个供货商,有好几个医院…
这里主要写Action和Service. 先写Service层: 架构如下:…
当医院把采购单提交之后,由监管单位进行采购单审核,由卫生院及卫生局进行审核.卫生局可以审核所有医院创建的采购单,卫生院只审核本辖区医院创建的采购单. 操作流程: 点击"采购单审核" 显示如下: 具体实施如下: Dao层: 分为两个: 查找cgd表中的数据以及数据的数量来实现分页. 我们查找cdg数据的SQL语句: select useryy.mc useryymc, yycgd.*, (select info from dictinfo ' and dictcode = yycgd.z…
前一篇文章我们做的是在医院的角度上添加在采购单里面添加药品.这一篇文章是查看我们添加的采购单信息. 我们先看一下要实现的效果:当: 按下确认添加时,会在这里 显示出刚才添加的数据. 好,我们就来做这个效果: 还是三层:Sql->Mapper->Service->Action. sql的写法我们要看需求 (看需要查什么) sql如下: 一共两个Sql: <!-- 采购单药品明细查询列表 --> select yycgdmx.id yycgdmxid, useryy.id use…
我们上一篇文章写到了要从editcgd.action为入口讲.我们要做的事根据edicgd.acion进入到Action层的一个函数,在这个函数里面要做的就是从数据库中把采购单表里面的数据都查出来显示在页面上. 这个action中要做的工作是: 1:从系统配置表中把系统的一些信息查出来(比如采购状态用作下拉表),用来修改采购单信息. 2:根据传进来的采购单的id,找出采购单. 3:把采购单加入到Model中,传到页面,显示. 达到的效果是: 来到这个页面: 输入信息,然后点击保存按钮之后. 来到…
我们根据数据库里面的表格:生成对应的Mapper接口文件和...Mapperxml文件: YYCGD:采购单模板表. YYCGD2014:采购单动态生成表,由存储过程生成. YYCGDMX:采购单明细模板表. YYCGDMX2014:采购单明细表,由存储过程生成. 在逆向工程中: File configFile = new File("generatorConfig-business.xml") ----> <table schema="" tableN…
前一篇文章已经把sql语句写好了并且在PL/SQL上调试过了,是可以的.这篇文章是写对应的mapper.xml, 第一步我们先通过逆向工程去构建每个表的mapper.xml文件和pojo类.这个我们在之前的博客中已经实现了. 逆向工程创建的mapper.xml和pojo类是针对于单表的,这肯定不是符合我们规则的,因为我们要查询的东西包括用户的单位什么的,这是在别的表上的.所以要自己写自定义的mapper.xml和pojo类. 先给出已有的工程的结构目录:…
权限管理指的是用户授权,与拦截器没有关系.拦截器只是一个技术,也可以用别的技术来实现的.别人问你权限管理,可不要和人家说什么拦截器.要说用户授权 前一篇文章是把实现了不同的用户呈现不用的菜单.这一篇文章要实现的是不同的操作权限的控制,因为在菜单下有操作权限,我们现在就控制操作. 我们的权限拦截就是指各种菜单下的操作也要拦截.只要是不符合自己角色的访问操作都要拦截掉. 拦截流程如下: 我们这里不写拦截器,我们这篇文章就是讲一下怎么根据用户的角色来得到用户的操作权限. sql如下: select b…
我们之前把采购单都审核了,这篇文章说的就是审核之后提交. 其实就是改变(update)采购单的审核状态. 需求: 用户要先查看采购单的内容. 查看采购单页面:页面布局同采购单修改页面. 选择审核结果.填写 审核意见进行提交 . 约束条件: 采购单状态为审核中方可提交审核. 审核结果(审核通过.审核不通过)必须选择. 审核意见是否必填根据用户需求来定,本系统采用不必填 . 数据库操作: 更新采购单状态为审核通过或审核不通过. DAo层: 使用逆向工程生成的Mapper: yycgdMapper.u…
删除用户的功能我们还是按照:Dao->Service->Action->页面调试这种顺序来写. Dao: 我们使用逆向工程生成的方法就好: SysuserMapper sysuserMapper; sysuserMapper.deleteByPrimaryKey(userid); Service层: 涉及到一些逻辑: //根据用户的id来删除用户 @Override public void deleteUserByUserid(String userid) throws Exceptio…
这篇文章要做的就是优化,封装.把之前的代码尽量封装进类,并且不要硬编码. 在UserServiceimpl中的insertSysuser()函数之前是这么写的: ResultInfo resultInfo=new ResultInfo(); resultInfo.setType(ResultInfo.TYPE_RESULT_FAIL); String message=ResourcesUtil.getValue("resources.messages", "213"…
我们上一篇文章是建立了一个自定义的异常类,来代替了原始的Exception类.在Serice层抛出异常,然后要在Action层捕获这个异常,这样的话在每个Action中都要有try{}catch{}代码,这样很麻烦啊,那怎么办?定义一个统一的异常处理器类.所有的异常都不用自己去捕获了,统一进行处理就好. 编写流程:…
近日来我有幸主导了一个典型的web app开发.该项目从产品层次来说是个典型的CRUD应用,故而我毫不犹豫地采用了grunt + boilerplate + angularjs + bootstrap + D3 + requirejs 的架构来实现它.angularjs早在去年6月份我就有所接触,将它应用在实验室项目的个别页面中,11月份在新浪的时候也将其推荐给了所在云事业部项目组.项目组老大程辉等人都是很有技术敏感性的人,大胆地采纳了我的建议,将之应用于原本使用dojo开发的项目前端模块上.然…