纳税服务系统七(投诉管理模块)【显示投诉信息、处理回复、我要投诉、Quartz自动受理、统计图FusionCharts】(三)

简介: 接下来,就是来开发我们的投诉受理管理模块了…..我们来看看原型图与需求吧

投诉受理的三圈问题

在信息管理模块的时候,我们就提出了三圈的问题了。何为三圈问题呢???就是当我们使用条件查询出数据的时候,再对查询出的数据进行操作【修改、保存】,当保存完之后回到列表显示页面上的时候,查询条件就会丢失掉了。也就是说,我们原来查询出的数据不见了。

首先,我们在Action中使用两个变量把有可能成为查询条件的变量记住:

/************三圈问题数据回显*************************/
    private String compTitle;
    private String state;
    public String getCompTitle() {
        return compTitle;
    }
    public void setCompTitle(String compTitle) {
        this.compTitle = compTitle;
    }
    public String getState() {
        return state;
    }
    public void setState(String state) {
        this.state = state;
    }

接着,在跳转到处理投诉页面的JSP上的时候,把查询条件的数据查询出来,把它赋值给变量。然后使用request域对象把数据发给JSP页面

//把查询条件带过去给JSP页面
            ActionContext.getContext().getContextMap().put("compTitle", complain.getCompTitle());
            ActionContext.getContext().getContextMap().put("state", complain.getState());
            ActionContext.getContext().getContextMap().put("startTime", startTime);
            ActionContext.getContext().getContextMap().put("endTime", endTime);

然后在处理投诉页面的JSP上,通过隐藏域把数据给回Action。。Action在重定向到listUI页面的时候,就通过配置文件,把参数带过去:

<!--返回列表展示页面,重定向到列表展示-->
            <result name="list" type="redirectAction">
                <param name="actionName">complain_listUI</param>
                <param name="complain.state">${state}</param>
                <param name="complain.compTitle">${compTitle}</param>
                <param name="endTime">${startTime}</param>
                <param name="startTime">${startTime}</param>
                <param name="encode">true</param>
            </result>

这样一来,我们的查询条件就没有丢失了。当我们操作完数据的时候,我们的查询出来的数据还是原来那部分。


Quartz自动受理

回到我们的需求:

自动投诉受理:在每个月月底最后一天对本月之前的投诉进行自动处理;将投诉信息的状态改为 已失效。在后台管理中不能对该类型投诉进行回复。

这个需求需求我们要怎么弄呢????要在每个月底最后一天对本月之前的投诉进行自动处理。。。。

记得我们以前在学习Java基础的时候学过了一个Timer这么一个类,可以用规定的频率来执行我们的代码。。。使用起来是非常简单的:

微信图片_20220412001435.png

微信图片_20220412001438.png

但是呢,要精确到每个月的月底,这就需要我们人为去判断时间了,这就非常不方便了。

因此,我们引入了另一个非常好用的框架:Quartz


Quartz

这是一个优秀的开源任务调度框架“quartz”,可以简单理解成他是Timer的升级版….Spring集成了该框架…

快速入门

我们要使用它,就要导入其开发包:quartz-1.8.6.jar,和Spring对其支持的开发包:org.springframework.context.support-3.0.2.RELEASE

使用它的步骤是十分简单的,可分成三个步骤:

1、制定任务信息 bean

  • ① 设置执行对象
  • ② 设置执行对象中对应的执行方法
  • ③ 是否可以同步执行

2、制定任务执行时机(执行触发器) bean

  • 2.1、简单触发器(SimpleTrigger)
  • ① 设置任务详细
  • ② 设置任务延迟执行时间
  • ③ 设置任务执行频率
  • 2.2、任务触发器(CronTrigger)
  • ① 设置任务详细
  • ② 设置执行时机(cronExpression)
  • cronExpression:秒 分 时 日 月 周 年(可选)

3、设置任务调度工厂 bean

  • 设置触发器们

jobDetail任务详细信息

1、jobDetail 任务详细信息;包括调用哪个类;类中的哪个方法;执行时是否可并行执行任务

<!-- 1、制定任务信息信息 -->
   <bean id="jobDetail1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
              <!-- 设置执行对象 -->
              <property name="targetObject" ref="quartzTask"></property>
              <!-- 设置执行对象中对应的执行方法 -->
              <property name="targetMethod" value="doSimpleTriggerTask"></property>
              <!-- 是否可以同步执行;不可同步执行 -->
              <property name="concurrent" value="false"></property>
   </bean>
   <bean id="jobDetail2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
              <!-- 设置执行对象 -->
              <property name="targetObject" ref="quartzTask"></property>
              <!-- 设置执行对象中对应的执行方法 -->
              <property name="targetMethod" value="doCronTriggerTask"></property>
              <!-- 是否可以同步执行;不可同步执行 -->
              <property name="concurrent" value="false"></property>
   </bean>

微信图片_20220412001445.jpg


trigger任务调度触发器

2、trigger 任务调度触发器;主要用于定义jobDetail什么时候执行。触发器最常用的有两种:简单触发器SimpleTrigger 和 任务触发器CronTrigger 。SimpleTrigger和jdk的timer类似,只能指定任务执行以什么样的频率执行,但无法制定精确的执行时间。CronTrigger则既可以执行简单触发器所制定的以频率来执行的时间,也可以制定复杂的时间计划来执行

<!-- 2、制定任务执行时机(任务执行触发器) -->
   <bean id="simplerTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
           <!-- 设置任务详细 -->
           <property name="jobDetail" ref="jobDetail1"></property>
           <!-- 设置任务延迟执行时间 ;延迟2秒执行-->
           <property name="startDelay" value="2000"></property>
           <!-- 设置任务执行频率;执行频率为每4秒执行一下 -->
           <property name="repeatInterval" value="2000"></property>
   </bean>
   <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <!-- 设置任务详细 -->
           <property name="jobDetail" ref="jobDetail2"></property>
           <!-- 设置任务执行时机,cron表达式 -->
           <property name="cronExpression" value="* * * 18c * ?"></property>
   </bean>

微信图片_20220412001449.jpg

这里我们着重要了解表达式怎么写:秒 分 时 日 月 周 年【日和周不能同时出现】

微信图片_20220412001453.png


schedulerFactory 任务调度工厂

schedulerFactory 任务调度工厂;用于调度各个任务触发器。

任务调度工厂可以调度多个任务同时进行

<!-- 3、设置调度工厂 -->
   <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
           <property name="triggers">
               <list>
                   <!-- <ref bean="simplerTrigger"/> -->
                   <ref bean="cronTrigger"/>
               </list>
           </property>
   </bean>

微信图片_20220412001456.png

自动受理

回到我们的需求,我们已经大概了解了Quartz这么一个开源框架使用了。我们就可以在每个月的最后一天中去执行我们对应的代码就行了。

  • 时机:
  • 每个月月底最后一天;cronExpression:10 10 2 L * ?
  • 执行什么内容:
  • 对本月之前的待受理投诉进行自动处理;将投诉信息的状态改为 已失效
  • 如何执行:
  • 本月之前的待受理投诉:select * from Complain where 投诉时间 < 本月1号0时0分0秒

在Spring配置文件中加入Quartz框架….

我们在Service中执行对应的代码

<!-- 1、制定任务信息信息 -->
    <bean id="jobDetail1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <!-- 设置执行对象 -->
        <property name="targetObject" ref="complainServiceImpl"></property>
        <!-- 设置执行对象中对应的执行方法 -->
        <property name="targetMethod" value="doTask"></property>
        <!-- 是否可以同步执行;不可同步执行 -->
        <property name="concurrent" value="false"></property>
    </bean>
    <!-- 2、制定任务执行时机(任务执行触发器) -->
    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <!-- 设置任务详细 -->
        <property name="jobDetail" ref="jobDetail1"></property>
        <!-- 设置任务执行时机,cron表达式 -->
        <property name="cronExpression" value="10 10 2 L * ?"></property>
    </bean>
    <!-- 3、设置调度工厂 -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="cronTrigger"/>
            </list>
        </property>
    </bean>
</beans>

查询出未处理和是本月前的记录,修改成是失效的。

@Override
    public void doTask() {
        //查询所有待受理的信息
        QueryHelper queryHelper = new QueryHelper(Complain.class, "c");
        queryHelper.addCondition("  c.state=?", Complain.COMPLAIN_STATE_UNDONE);
        //只要在本月之前
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        queryHelper.addCondition(" c.compTime <?", calendar.getTime());
        //拿到本月之前所有未处理的数据
        List<Complain> complains = findObjects(queryHelper);
        //将数据全部改成是失效的了。
        for (Complain complain : complains) {
            complain.setState(Complain.COMPLAIN_STATE_INVALID);
        }
    }
}

如果已经失效了,那么我们就不让管理员对其进行回复了。

<s:if test="state!=2"> <a href="javascript:doDeal('<s:property value='compId'/>')">受理</a></s:if>

微信图片_20220412001502.png

目录
相关文章
|
5月前
|
存储 数据库 数据安全/隐私保护
针对纸质检验记录表单电子化搭建
【2月更文挑战第2天】针对纸质检验记录表单电子化搭建
41 2
|
小程序
【易售小程序项目】悬浮按钮+出售闲置商品+商品分类选择【后端基于若依管理系统开发】
【易售小程序项目】悬浮按钮+出售闲置商品+商品分类选择【后端基于若依管理系统开发】
50 0
|
2月前
|
Java
设计信息录入界面,完成人员基本信息的录入工作,其中籍贯中涉及的“省、市”能实现联动,即选择“省”时,“市”会根据选择的“省”做相应的变换。
该博客文章展示了如何设计一个包含联动下拉列表(省、市)的信息录入界面,使用Java Swing组件库实现人员基本信息的录入,并提供了完整的界面布局和事件处理代码。
设计信息录入界面,完成人员基本信息的录入工作,其中籍贯中涉及的“省、市”能实现联动,即选择“省”时,“市”会根据选择的“省”做相应的变换。
|
3月前
|
前端开发
会员系统02--,后台管理系统,包含网站运营,统计分析,用户中心,财务管理,资金明细,系统管理,参数配置,后台管理系统可以观看配置资料,广告位的相关资料,客服工单最主要是客户反馈给我们的问题,登录统计
会员系统02--,后台管理系统,包含网站运营,统计分析,用户中心,财务管理,资金明细,系统管理,参数配置,后台管理系统可以观看配置资料,广告位的相关资料,客服工单最主要是客户反馈给我们的问题,登录统计
|
5月前
|
Java 数据库 数据安全/隐私保护
基于Servlet+Jsp实现的酒店客房预定管理系统分前后台
基于Servlet+Jsp实现的酒店客房预定管理系统分前后台
|
10月前
|
安全 小程序
人员信息管理二维码系统:扫码查看人员档案,随时补充人员信息
对于人员实名管理、来访登记、安全教育等需求,可以在草料二维码上搭建人员信息管理系统。除了扫码查看个人信息、身份证件、资格证书、劳务合同等人员档案,还可以组合表单、状态等功能组件,在二维码上展示证件状态,更新人员的奖惩、培训等情况,替代纸质记录表。
125 0
人员信息管理二维码系统:扫码查看人员档案,随时补充人员信息
|
5月前
|
数据可视化 BI API
无纸化登记二维码应用方案:扫码填写表单,信息收集无纸化
日常生活中的申请表、签到表、报名表等纸质表格,收集到的信息常常不规范,可以搭建用于信息收集的二维码应用,通过扫码填写电子表单的方式,实现核销、业务申请、内部审批等场景的无纸化登记,并能将填写的信息导出为Excel表格存档。
175 0
|
11月前
|
安全 前端开发 Java
【开题报告】基于SpringBoot的演唱会门票在线预定系统的设计与实现
【开题报告】基于SpringBoot的演唱会门票在线预定系统的设计与实现
331 0
|
11月前
|
安全 Java 测试技术
【开题报告】基于SpringBoot的民宿在线预定系统的设计与实现
【开题报告】基于SpringBoot的民宿在线预定系统的设计与实现
428 0
|
Unix vr&ar
SAP后勤自动过帐(OBYC)详细配置说明
OBYC配置中,很多小伙伴对于每个记账码的用途不是很明白,只知道库存记账GBB之类的几个常用记账码,下面是笔者在使用过程中用到并整理的部分资料 ,希望能帮到有用的人!
SAP后勤自动过帐(OBYC)详细配置说明