库存预警报表
一.需求及实现思路
- 需求:
统计每种商品的库存数量与待发货数量,如果库存数量小于待发货数量则要进行库存预警 - 实现思路:
将整个查询结果拆成2个子查询,再合并起来
二.SQL语句编写
- 先实现当前商品库存统计,查询出每种商品的库存数量
这种结果只能查询存在库存的商品数量,而库存中不存在的商品则不会显示出来。我们可以通过左外连方式来进行查询。使用nvl方法把null转成0 - 实现销售订单中商品数量的统计,统计每种待发货的商品数量
- 通过商品编号将上面这2种查询组合起来
三.视图创建
- 我们上边的语句的查询结果是我们经常要用的,每次都写很繁琐,所以我们可以把常用的复杂查询直接建立为视图,把它当成hibernate中的一个表来处理,这样可以极大简化我们的开发,便于日常维护。
- 创建视图sql语句
四.后端代码
- 创建实体类 , 属性及get set方法
- 创建映射文件 storealert.hbm.xml
- 数据访问层实现
在IStoredetailDao中加入方法
在StoredetailDao中加入方法 - 业务逻辑层实现
在IStoredetailBiz中添加方法
在StoredetailBiz中添加方法 - Action层实现
在StoredetailAction中加入方法:
五.前端代码
JavaMail发送预警邮件(扩展)
- 添加js/storealert.js文件
- 添加storealert.html文件
- 运行结果
一.需求分析
实现发送邮件预警功能,提醒相关人员进行采购。点击“发送警报邮件”按钮即可发送库存报警。
如果存在报警商品并成功发送,提示发送成功
如果不存在报警商品,提示没有库存报警商品
二.JavaMail简介
- JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。JavaMail API是Sun公司为方便Java开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发包,它支持一些常用的邮件协议,如:SMTP、POP3、IMAP。开发人员使用JavaMail API编写邮件处理软件时,无须考虑邮件协议底层的实现细节,只要调用JavaMail开发包中相应的API类就可以了。
- 使用 JavaMail,我们可以实现类似 OutLook、FoxMail 的软件。
Spring的javaMailSender对JavaMail进行封装,简化了开发,告别繁琐的API
三.入门Demo
- 邮箱设置
登陆邮箱后,进入设置,开启POP3/SMTP - 创建工程
- 添加依赖
- 编写发送Email类
- 编写spring配置文件
创建applicationContext_mail.xml文件,copy文件头约束后,添加下面代码 - 编写测试代码
创建测试类,并运行测试
四.ERP中实现发送预警邮件
- 添加依赖
在父工程的pom.xml中添加java mail的依赖 - 编写发送邮件工具类
在业务逻辑层中创建MailUtil - 编写spring配置文件
创建applicationContext_mail.xml - 编写业务逻辑类
给IStoredetailBiz添加sendStoreAlertMail方法
StoredetailBiz添加sendStoreAlertMail方法 - 修改applicationContext_biz.xml
storedetailBiz节点,添加: - 编写action代码
修改StoredetailAction,添加代码: - 编写js代码
修改storealert.js:
Quartz定时发送预警邮件(重点)
一.需求及实现思路
- 定时查询库存预警信息,一旦存在库存预警的商品,则发邮件通知相关人员
二.Quartz 框架
- .Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它完全由 Java 写成,并设计用于 J2SE 和 J2EE 应用中。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。
- Job
表示一个任务(工作),要执行的具体内容。 - JobDetail
JobDetail 表示一个具体的可执行的调度程序,Job 是这个可执行程调度程序所要 执行的内容,另外 JobDetail 还包含了这个任务调度的方案和策略。
告诉调度容器,将来执行哪个类(job)的哪个方法 - Trigger 是一个类,代表一个调度参数的配置,描述触发Job执行的时间触发规则。一个Job可以对应多个Trigger,但一个Trigger只能对应一个Job
- Scheduler 代表一个调度容器,一个调度容器中可以注册多个 JobDetail 和Trigger。 Scheduler可以将Trigger绑定到某一JobDetail中,这样当Trigger触发时,对应的Job就被执行。
- Note: 当JobDetail和Trigger在scheduler容器上注册后,形成了装配好的作业(JobDetail和Trigger所组成的一对儿),就可以伴随容器启动而调度执行了。
三.入门Demo
- 创建Demo工程,加入依赖
添加依赖: - 编写任务类
创建JobTest类,代码如下 -
配置文件
添加applicationContext-job.xml文件 -
测试
创建测试类QuartzTest,注:不能使用junit做测试,因为一运行完,程序就结束了。 -
表达式cron详解
Cron 表达式是一个字符串,字符串以 5 或 6 个空格隔开,分为 6 或 7 个域,每一个域代表一个含义。也叫七子表达式
四.代码实现
- 添加quartz依赖
打开父工程的pom.xml,添加quartz依赖: - 创建任务类
在业务逻辑层中新建MailJob类,包名为cn.itcast.erp.job - 配置文件
创建applicationContext_job.xml