1. 程式人生 > >BOS物流項目第十三天

BOS物流項目第十三天

find 圖表庫 image put request dao 通過 頁面 sage

教學計劃

1Quartz概述

a. Quartz介紹和下載

b. 入門案例

c. Quartz執行流程

d. cron表達式

2、在BOS項目中使用Quartz創建定時任務

3、在BOS項目中使用JavaMail發送郵件

4HighCharts概述

a. HighCharts介紹

b. 在線演示

5、基於HighCharts實現區域分區分布圖

1 Quartz概述

1.1 quartz介紹和下載

官網:http://www.quartz-scheduler.org/

技術分享圖片

QuartzOpenSymphony開源組織在Job scheduling領域又一個開源項目,它可以與J2EE

J2SE應用程序相結合也可以單獨使用。Quartz可以用來創建簡單或為運行十個,百個,甚至是好幾萬個Jobs這樣復雜的程序。Jobs可以做成標準的Java組件或 EJBsQuartz的最新版本為Quartz 2.2.3

下載壓縮包:

技術分享圖片

解壓壓縮包:

技術分享圖片

1.2 入門案例

第一步:創建maven工程,導入springquartz相關依賴

技術分享圖片

第二步:創建任務類

技術分享圖片

第三步:在spring配置文件中配置任務類

技術分享圖片

第四步:在spring配置文件中配置JobDetail

技術分享圖片

第五步:在spring配置文件中配置觸發器

技術分享圖片

第六步:在spring配置文件中配置scheduler

技術分享圖片

第七步:加載spring配置文件,創建

spring工廠

技術分享圖片

2 BOS項目中引入quartz

第一步:在pom.xml中引入quartzJavaMail的依賴

快速引入:點擊右鍵選擇Maven,然後選擇Add Dependency,會跳出下面窗口,輸入我們要找的依賴,搜索選擇即可

技術分享圖片

最後我們導入以下依賴

技術分享圖片

第二步:提供一個作業類,用於為系統管理員發送郵件

public class MailJob {
    @Resource
    private IWorkbillDao workbillDao;
    private String username;//發件人的郵箱賬號
    private String password;//
密碼 private String smtpServer;//服務器 public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public void execute() { System.out.println("要發郵件了。。。" + new Date()); try { //查詢工單類型為新單的所有工單 List<Workbill> list = workbillDao.findAll(); if(null != list && list.size() > 0){ final Properties mailProps = new Properties(); mailProps.put("mail.smtp.host", this.getSmtpServer()); mailProps.put("mail.smtp.auth", "true"); mailProps.put("mail.username", this.getUsername()); mailProps.put("mail.password", this.getPassword()); // 構建授權信息,用於進行SMTP進行身份驗證 Authenticator authenticator = new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { // 用戶名、密碼 String userName = mailProps.getProperty("mail.username"); String password = mailProps.getProperty("mail.password"); return new PasswordAuthentication(userName, password); } }; // 使用環境屬性和授權信息,創建郵件會話 Session mailSession = Session.getInstance(mailProps, authenticator); for(Workbill workbill : list){ // 創建郵件消息 MimeMessage message = new MimeMessage(mailSession); // 設置發件人 InternetAddress from = new InternetAddress(mailProps.getProperty("mail.username")); message.setFrom(from); // 設置收件人 InternetAddress to = new InternetAddress("[email protected]"); message.setRecipient(RecipientType.TO, to); // 設置郵件標題 message.setSubject("系統郵件:新單通知"); // 設置郵件的內容體 message.setContent(workbill.toString(), "text/html;charset=UTF-8"); // 發送郵件 Transport.send(message); } } } catch (Exception ex) { ex.printStackTrace(); } } public String getSmtpServer() { return smtpServer; } public void setSmtpServer(String smtpServer) { this.smtpServer = smtpServer; } }

第三步:在spring配置文件中配置

<!-- 註冊自定義作業類 -->
    <bean id="myJob" class="com.itheima.jobs.MailJob">
        <property name="username" value="[email protected]"/>
        <property name="password" value="147963qP"/>
        <property name="smtpServer" value="smtp.126.com"/>
    </bean>
    
    <!-- 配置JobDetail -->
    <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <!-- 註入目標對象 -->
        <property name="targetObject" ref="myJob"/>
        <!-- 註入目標方法 -->
        <property name="targetMethod" value="execute"/>
    </bean>
    
    <!-- 配置觸發器 -->
    <bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <!-- 註入任務詳情對象 -->
        <property name="jobDetail" ref="jobDetail"/>
        <!-- 註入cron表達式,通過這個表達式指定觸發的時間點 -->
        <property name="cronExpression">
            <value>0/5 * * * * ?</value>
        </property>
    </bean>
    
    <!-- 配置調度工廠 -->
    <bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <!-- 註入觸發器 -->
        <property name="triggers">
            <list>
                <ref bean="myTrigger"/>
            </list>
        </property>
    </bean>

3 Highcharts

3.1 Highcharts簡介

Highcharts 是一個用純JavaScript編寫的一個圖表庫, 能夠很簡單便捷的在web網站或是web應用程序添加有交互性的圖表,並且免費提供給個人學習、個人網站和非商業用途使用。HighCharts支持的圖表類型有曲線圖、區域圖、柱狀圖、餅狀圖、散狀點圖和綜合圖表。

基於jQuery開發一個圖形報表工具插件

官網:http://www.hcharts.cn/

下載zip開發文檔:

技術分享圖片

解壓zip文件:

技術分享圖片

技術分享圖片

3.2 入門案例

第一步:將Highcharts相關資源文件復制到項目中

技術分享圖片

第二步:在頁面中引入相關js文件

<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.8.3.js"></script>
<script src="${pageContext.request.contextPath }/js/highcharts/highcharts.js"></script>
<script src="${pageContext.request.contextPath }/js/highcharts/modules/exporting.js"></script>

第三步:在頁面中提供一個div,並指定id屬性

技術分享圖片

第四步:調用Highcharts提供的方法,動態創建圖表

技術分享圖片

4 BOS項目中展示區域分區分布圖

第一步:在subarea.jsp頁面中引入Highcharts資源文件

第二步:在jsp頁面中提供按鈕,並提供div窗口,在這個窗口中展示圖表

技術分享圖片

技術分享圖片

第三步:定義function

function doShowHighcharts(){
        $("#showSubareaWindow").window("open");
        //頁面加載完成後,動態創建圖表
        $.post("subareaAction_findSubareasGroupByProvince.action",function(data){
            $("#test").highcharts({
                title: {
                    text: ‘區域分區分布圖‘
                },
                series: [{
                    type: ‘pie‘,
                    name: ‘區域分區分布圖‘,
                    data: data
                }]
            });
        });
    }

第四步:在服務端Action中提供方法

Action代碼:

技術分享圖片

Dao代碼:

@Repository
public class SubareaDaoImpl extends BaseDaoImpl<Subarea> implements ISubareaDao {
    public List<Object> findSubareasGroupByProvince() {
        String hql = "SELECT r.province ,count(*) FROM Subarea s LEFT OUTER JOIN s.region r Group BY r.province";
        return (List<Object>) this.getHibernateTemplate().find(hql);
    }
}

技術分享圖片

BOS物流項目第十三天