医药采购系统 第13天 课堂笔记20170104_第1页
医药采购系统 第13天 课堂笔记20170104_第2页
医药采购系统 第13天 课堂笔记20170104_第3页
医药采购系统 第13天 课堂笔记20170104_第4页
医药采购系统 第13天 课堂笔记20170104_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目第13天 采购单 Quartz入门1 课程计划1、采购单模块1)提交采购单2)审核采购单-查询待审核列表(用到细粒度权限控制)2、统计分析模块1)统计分析需求(用户所使用的系统功能)2)分析数据聚合的方法,使用Quartz任务调度框架定时执行一些任务2 回顾2.1 采购单药品清单列表(实现细粒度控制)此功能分页查询 采购单明细表,实现细粒度控制:dao:拼接根据采购单id查询service:实现细粒度控制,无论如何要把采购单id传给dao2.1 采购单药品清单列表(自定义条件查询)2.1.1 需求2.1.2 dao(YycgdMxDao)实现根据流水号拼接查询条件2.1.3 service(YycgdServiceImpl)将流水号传给dao流水号不是必须要传给dao的,用户输入了流水号就传给dao。service可以通过YycgdMxQueryCustom形参接收流水号,传给dao。原来的service接口不用改变。2.1.4 action(CgdAction yycgdmxlist_result.action)接收页面请求的流水号,传给service.使用模型对象中的YycgdMxQueryCustom属性接收参数2.1.5 edit.jsp创建form,将采购明细的查询条件包起来:注意定义输入框的name(名称和模型对象的属性名一致)查询按钮 查询js方法:2.1.6 调试输入流水号查询,报错:不能解析ypxx.bm 的属性原因:当查询关联对象的非主键属性时候报上边的错误。解决:2.1.7 根据药品类别查询 dao拼接根据药品类别拼接 service原来的service接口不用改变。 action接收页面参数传给service edit.jsp定义name:传给模型对象显示下拉框:在edit.action的方法中查询药品类别,放入值栈在edit.jsp中从值栈取数据,显示下拉框:2.1.8 小结 当查询关联对象的非主键属性时候需要设置别名。2.2 jquery easyui1.4版本的total为0重复请求bug处理描述:如果datagrid的total为0,datagrid重复发起两次请求。解决:修改屏蔽掉下边的代码:3 提交采购单3.1 需求用户创建采购单完成后不再修改采购单进行提交1、用户进入采购单修改页面2、点击提交前置条件: 1、确定要提交哪个采购单 2、当采购单状态为“未提交”、“审核不通过”才可提交 3、采购单已添加了采购药品明细,并且采购量不能为0方可提交后置条件: 采购单状态更改为“已提交未审核” ,更新采购单基本信息表中采购单状态3.2 dao更新采购单基本信息表创建YycgdDao,使用baseDao中update方法即可。3.3 service提交采购单/* * 提交采购单 * param yycgdId 采购单id */public void saveYycgdState(Integer yycgdId)/校验Yycgd yycgd = yycgdDao.findById(yycgdId);if(yycgd = null)/异常./采购单状态SysDictInfo sysDictInfoByzt = yycgd.getSysDictInfoByzt();/采购单状态String ztId = sysDictInfoByzt.getId();if(!(ztId.equals(01001) | ztId.equals(01004)/异常.采购单状态为未提交或审核不通过时方可提交/采购单已添加了采购药品明细,并且采购量不能为0方可提交/取出采购单中药品明细Set yycgdMxes = yycgd.getYycgdMxes();if(yycgdMxes.size()=0)/异常.采购单中没有添加药品无法提交/判断采购单明细中采购量是否为0Iterator yycgdMxes_iterator = yycgdMxes.iterator();while(yycgdMxes_iterator.hasNext()/取出采购单下的明细YycgdMx yycgdMx = (YycgdMx) yycgdMxes_iterator.next();/采购量Integer cgl = yycgdMx.getCgl();if(cgl=0)/异常.采购单中存在采购量为0的记录不允许提交/采购单状态更改为“已提交未审核”SysDictInfo sysDictInfoByzt_u = new SysDictInfo();sysDictInfoByzt_u.setId(01002);/已提交未审核yycgd.setSysDictInfoByzt(sysDictInfoByzt);/提交时间yycgd.setTjsj(MyUtil.getNowDate();/执行更新yycgdDao.update(yycgd);3.4 action3.5 jsp(edit.jsp)1/form定义2、js方法3.6 调试1、提交前给用户提示2、采购单状态更新后没有修改,跟踪后台sql修改:3、采购单提交后,不显示不显示提交按钮 4 审核采购单-查询待审核列表4.1 需求采购单提交后,由卫生院进行审核。操作流程:1、卫生院登陆系统2、点击菜单“审核采购单”卫生院查询到本辖区卫生室所提交的采购单前置条件: 卫生院查询到本辖区卫生室所提交的采购单 只查询采购单状态为已提交未审核采购单后置条件: 分页查询采购单基本信息表分析卫生院如何查询本辖区卫生室的采购单?-要确定哪个卫生院来查询 15819c06-09a1-11e3-8a4f-60a44cea4388select * from dw_wsy where id=15819c06-09a1-11e3-8a4f-60a44cea4388-要找卫生院的管理辖区 1.1.select dq from dw_wsy where id=15819c06-09a1-11e3-8a4f-60a44cea4388-要找管理辖区 1.1.下的卫生室select id from dw_wss where dq like 1.1.%-要找管理辖区 1.1.下的卫生室所创建的采购单select * from yycgd where wss_id in(select id from dw_wss where dq like 1.1.%)-或者select * from yycgd where wss_id in(1f8b098b-067e-11e3-8a3c-0019d2ce5116,1f95503c-067e-11e3-8a3c-0019d2ce5116,1f9db2d9-067e-11e3-8a3c-0019d2ce5116)4.2 dao前置条件: 卫生院查询到本辖区卫生室所提交的采购单 只查询采购单状态为已提交未审核采购单在query对象中扩展属性传入多个卫生室id要实现条件拼接:1、根据采购单状态来查询2、根据多个卫生室id查询这些卫生室所创建的采购单dao接口是公用的接口。在DwWssDao中定义方法模糊查询4.3 service实现细粒度控制 卫生院查询到本辖区卫生室所提交的采购单 只查询采购单状态为已提交未审核采购单/* * 待审核采购单列表 * param wsy_id 卫生院id * param yycgdQueryCustom * param firstResult * param maxResults * return */public List findCheckYycgdList(String wsy_id, YycgdQueryCustom yycgdQueryCustom, int firstResult, int maxResults)if(yycgdQueryCustom = null)yycgdQueryCustom = new YycgdQueryCustom();/实现细粒度控制,要传入采购单状态为“已提交未审核”SysDictInfo sysDictInfoByzt = yycgdQueryCustom.getSysDictInfoByzt();if(sysDictInfoByzt = null)sysDictInfoByzt = new SysDictInfo();/设置状态为已提交未审核sysDictInfoByzt.setId(01002);yycgdQueryCustom.setSysDictInfoByzt(sysDictInfoByzt);/取出卫生院所管理的卫生室的id/* * 思路-要确定哪个卫生院来查询 15819c06-09a1-11e3-8a4f-60a44cea4388select * from dw_wsy where id=15819c06-09a1-11e3-8a4f-60a44cea4388-要找卫生院的管理辖区 1.1.select dq from dw_wsy where id=15819c06-09a1-11e3-8a4f-60a44cea4388-要找管理辖区 1.1.下的卫生室select id from dw_wss where dq like 1.1.% */查询卫生院DwWsy dwWsy = dwWsyDao.findById(wsy_id);/管理地区SysArea sysArea = dwWsy.getSysArea();String dq = sysArea.getId();/卫生院的管理 地区/要找管理辖区 下的卫生室 List dwWssList = dwWssDao.findDwWssByDq(dq);/取出卫生室 的idList dwWssIds = new ArrayList();for(DwWss dwWss:dwWssList)/卫生室的idString wssId = dwWss.getId();dwWssIds.add(wssId);/向查询条件中设置多个卫生室id传入daoyycgdQueryCustom.setWssIds(dwWssIds);return yycgdDao.findYycgdList(yycgdQueryCustom, firstResult, maxResults);4.4 action参考采购单维护列表/此方法由卫生院来访问/采购单待审核列表页面public String checklist()YycgdVo yycgdVo = this.getModel();/查询数据字典得到采购单状态,放入值栈List yycgdZtList = sysDictInfoService.findAllByTypecode(010);/放入值栈yycgdVo.setYycgdZtList(yycgdZtList);return checklist;/此方法由卫生院来访问/采购单待审核列表的json数据public void checklist_result()/模型对象YycgdVo yycgdVo = this.getModel();/获取datagrid请求的分页参数int page = yycgdVo.getPage();int rows = yycgdVo.getRows();/每页显示个数/获取页面查询条件YycgdQueryCustom yycgdQueryCustom = yycgdVo.getYycgdQueryCustom();/取出当前用户的身份信息(session)Subject subject = SecurityUtils.getSubject();/session中的activeUser在customRealm中创建的ActiveUser activeUser =(ActiveUser) subject.getPrincipal();/取出用户所属单位idString wsyId = activeUser.getSysid();/查询总记录数Long total = cgdService.findCheckYycgdCount(wsyId, yycgdQueryCustom);/工具类计算起始记录的下标PageBean pageBean = new PageBean(page, rows, Value();/起始 记录下标int startIndex = pageBean.getStartIndex();/分页查询List list = cgdService.findCheckYycgdList(wsyId, yycgdQueryCustom, startIndex, rows);/转json输出DataGridResultInfo dataGridResultInfo = ResultUtil.createDataGridResult(total, list);this.write_json(dataGridResultInfo);配置action4.5 checklist.jsp参考list.jsp1/加载datagrid5 统计分析5.1 了解统计分析涉及用户参与的系统都会有统计分析,针对用户交易明细进行统计(手机账单、银行账号消费账单。)统计分析功能包括:1、基础数据查询(明细查询)(手机账单、银行账号消费账单。)2、分类统计 按XXX分类统计5.2 需求包括:交易明细查询(基础数据查询)、分类统计。分类统计:按区域统计按药品分类统计:每种药品销售情况5.3 交易明细查询分析实现方案5.3.1 需求交易明细查询内容:1、采购单明细信息(药品名称、采购量、采购金额)2、入库信息(入库量、入库金额)3、退货信息(退货量、退货金额)4、结算信息(结算量、结算金额)5.3.2 方案1 多表关联查询采用多表关联查询。采购单明细信息表yycgd_mx 数据量大入库信息表:yycgd_rk 数据量大退货信息表:yycgd_th 数据量小结算信息表:yycgd_js 数 据量大存在问题:三张大表进行关联查询,速度慢。5.3.3 方案2 单表查询(推荐使用)如果使用单表查询,避免多表关联。将采购单明细表、入库表、结算表、退货表,聚合到一张交易明细表中创建一张交易明细表(只用于统计分析)5.4 数据聚合的方法5.4.1 需求根据上边分析,想把采购单明细表、入库表、结算表、退货表,聚合到一张交易明细表什么是数据聚合?数据聚合就是数据同步yycgd_mx表插入记录-yybusiness交易明细 插入yycgd_mx表更新记录-yybusiness交易明细 更新yycgd_mx表删除记录-yybusiness交易明细 删除yybusiness表和yycgd_mx表的唯一约束一致:5.4.2 分析数据同步(数据聚合)的时机什么时候进行上边数据同步可以减少同步的次数。当采购单信息不再改变的时候可以将采购单明细中的数据同步到交易明细表1、审核通过后将采购 单明细记录插入到交易明细表(教学实现)2、采购单受理完成后,将采购单明细的受理状态更新到交易明细表(项目实战)5.4.3 数据同步方法1(采用触发器)采用触发器方法1:在yycgd_mx表中创建三个触发器:yycgd_mx表创建插入触发器,触发器内容向yybusiness交易明细插入记录yycgd_mx表创建更新触发器,触发器内容向yybusiness交易明细更新记录yycgd_mx表创建删除触发器,触发器内容向yybusiness交易明细删除记录问题:创建的触发器比较多,复杂。方法2:由于审核通过后要将采购 单明细记录插入到交易明细表在yycgd表中创建一个更新触发器,内容:if(采购单状态=审核通过) 将采购 单明细记录插入到交易明细表问题:上边的触发器中包括业务逻辑(if(采购单状态=审核通过)),service接口中也有业务逻辑,业务逻辑分在多个地方维护,不利于业务维护。建议:将业务逻辑统一在service接口维护。5.4.4 数据同步方法2(service接口)在审核通过后要将采购 单明细记录插入到交易明细表修改审核采购单的service:CgdService public void saveCheckYycgd(Integer yycgdId) /更新采购单的状态为审核通过或审核不通过(本职工作) /将采购 单明细记录插入到交易明细表(新增用于数据同步的代码) /很多额外 工作,发短信、发邮件。 设计 service遵循原则:单一职责问题:上边的service接口包括了很多职责,不仅有本职工作(更新采购单状态),额外的工作采购单明细表的数据插入到交易明细表当额外工作需求要变更 ,不得不修改原来的service接口。5.4.5 数据同步方法3(最佳方案 采用独立的任务处理工程)好处:将任务处理的逻辑单独抽取到一个任务工程中。5.5 Quartz入门程序使用quartz定时执行一些任务(某个类的某个方法)。5.5.1 什么是Quartz相比jdk提供timer定时器(每隔多长时间执行),quartz根据日历进行调度(每周一、三、五执行?任务,每个月?号、?号去执行,每天的?点、?分去执行任务)5.5.2 创建yycg-task-ee40任务处理工程使用quartz框架完成定时任务处理。5.5.3 yycg-task添加依赖依赖yycg-framework依赖quartz org.quartz-scheduler quartzorg.springframeworkspring-context-support5.5.4 引入perties5.5.5 编写applicationContext-quartz.xmlquartz和spring整合,编写一个spring的配置文件appli

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论