类似于周报功能的实现过程

背景:最近用springmvc框架开发了一个展示周报的模块,其中牵涉到的功能还算是比较多的,所以针对周报汇总一下其中用到的具体技术和相应主要的代码。

1、数据清洗模块,主要由一个存储过程实现,

create or replace procedure proc_ids_weekly_report(i_date in varchar, o_resultCode out varchar,o_resultMsg out varchar

 ) is

    v_startdate varchar2(8);

    v_enddate varchar2(8);

begin 

     select  to_char( trunc (to_date(i_date,'yyyymmdd'), 'iw' ), 'yyyymmdd' ) into v_startdate  from dual; --所在周的周一
      select  to_char( trunc (to_date(i_date,'yyyymmdd'), 'iw' ) + 4, 'yyyymmdd' ) into v_startdate  from dual; --所在周的周五


    --添加业务逻辑

    如果中间有对小数进行格式化要求,可以参考:to_char(data,'fm99999990.00'),注意个位数要写0,这样如果遇到类似0.88这类数的时候,不会显示出“.00”,

    exception 

        when others then

            rollback;

            o_resultCode := '-1';

            o_resultMsg := sqlerrm(sqlcode);

        return;

end; 

2、数据清洗的定时任务功能。

      引入相应的jar包,在spring-mvc.xml中配置定时任务参数,

<!-- 周报数据定时任务 -->

<bean id="weeklyReportDataJob" class="com.iss.task.WeeklyReportDataJob">//要执行的Java类 包名.类名

<bean 

      id="weeklyReportJob"   class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  

        <!-- 指定任务类 -->  
        <property name="targetObject" ref="weeklyReportDataJob" />   //与第一行配置的bean名保持一致
        <!-- 指定任务方法 -->  
        <property name="targetMethod" value="weeklyReportData" />  
        <property name="concurrent" value="false" />  
    </bean>  
    <!-- 周报数据间隔触发器 -->  
    <bean id="weeklyReportJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">  
        <property name="jobDetail" ref="weeklyReportJob"/>
        <property name="cronExpression" value="0 10 * * * ?"/> <!-- value="0 0 8 ? * MON" -->
    </bean>  
    <bean id="schedulerFactoryBean"  class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
            <ref bean="weeklyReportJobTrigger" /> 
            </list>
        </property>
    </bean>

    

3、定时任务调用存储过程

    基本框架数据持久层用到的是mybites,所以在WeeklyReportDataJob类中要执行的是一个存储过程,直接引入Mapper类, 这里无需做其他连接数据库等配置,因为是mybits直接与数据库连接操作数据库。

       @Resource

private ReportWeeklyMapper reportWeeklyDao;

       public void weeklyReportData{//跟指定方法名一致

            Map<String,String> paramsMap = new HashMap<String,String>();

            paramsMap.put("i_date", indate);

            reportWeeklyDao.reportWeeklyProcedure(paramsMap);

    }

    在xml文件中调用存储过程:

   <!-- 定义存储过程 -->

    <select id="reportWeeklyProcedure" parameterType="java.util.Map" 

        statementType="CALLABLE" >//标记调用的是存储过程

      {
         call proc_ids_weekly_report(
               #{i_date,mode=IN,jdbcType=VARCHAR},//入参
               #{o_retCode,mode=OUT,jdbcType=VARCHAR},
               #{o_retMsg,mode=OUT,jdbcType=VARCHAR}
         )
      }  

  走到这一步,定时任务执行起来,会有数据清洗到目标中,接下来就是对数据的查询展示了。

4、数据的页面展示功能。此步骤结合框架查询出展示出来即可。省略了……


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dreamdawn0710/article/details/79963063
文章标签: 周报模块
个人分类: 报表模块
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭