|
一、实现效果
在JEpaas里面设置定时任务,让系统每隔一段时间进行一些操作。
二、实现思路
三、具体操作
1、如图1,在开发->定时任务里面增加一条定时任务。
2、如图2,设置对应的审批任务和开始时间,结束时间如果不写则默认是永远。
3、执行策略可以选择方法或者sql语句,如果选择方法,则只需要输入该方法的业务bean名称和该方法的方法名即可。在后台service里面实现该方法,并将该service注入到Spring容器中。如果选择sql直接在下面写sql语句即可。
4、在方法里面对时间进行判断,如果满足条件,则进行一些操作,本案例代码是每隔4小时往微信公众号上发送一条消息。
四、相关代码(可选)
- /**
- * 启动定时任务,微信公众号每隔四小时推送未审批的消息
- */
- @Override
- public void sendWxgzhApproveInfo () {
- //判断当前时间,如果不在8:00-20:00内,直接返回;在:true
- Boolean flag = true;
- long times = System.currentTimeMillis();
- Date date = new Date(times);
- SimpleDateFormat format = new SimpleDateFormat("HH");
- String hour = format.format(date);//2021-10-11 12:08:22
- int hourInt = Integer.parseInt(hour);
- if (hourInt > 8 && hourInt < 20) {
- flag = true;
- }else {flag = false;}}}
- if (!flag) {
- return;
- }
- String title = ""; //审核题目
- String context = "";
- //String pcShowFunc = ""; //表单展示
- String funcCode = "";//获取功能编码 0
- String AppFunc = funcCode; //APP的功能编码与原功能相同
- String funcName = ""; // 1
- String tableName = "";// 2
- String funcId = ""; //主键名 3
- String pkValue = ""; //表单主键 4
- String userId = "";//流程待执行人ID
- String sql = "select EXECUTION_ID_ as executionId,ASSIGNEE_ as userId from JBPM4_TASK where EXECUTION_ IS NOT NULL " +
- "AND SUPERTASK_ IS NULL " +
- "AND NAME_ NOT IN ( 'NODE_REJECT_TASK', 'ENTRUST_TRANSMIT_TASK', 'NODE_JOINCHILD_TASK' ) " +
- "AND EXECUTION_ID_ IN ( SELECT ID_ FROM JBPM4_EXECUTION WHERE PROCDEFID_ IN ( SELECT PROCESSINFO_PROCESSDEFINIT_ID FROM JE_CORE_PROCESSINFO WHERE PROCESSINFO_DEPLOYSTATUS = '1' AND PROCESSINFO_ENABLED = '1' ) ) " +
- "AND EXECUTION_ID_ NOT IN ( SELECT ID_ FROM JBPM4_HIST_PROCINST WHERE STATE_ = 'HANDUPED' ) " +
- "AND DELAYTASK_ = '0' ";
- List<Map> taskInfos = serviceTemplate.queryMapBySql(sql);
- for (Map task:taskInfos) {
- String executionId = (String)task.get("executionId");//流程实例
- userId = (String)task.get("userId"); //当前审批用户ID
- //如果查不到该用户直接返回
- List<DynaBean> users = serviceTemplate.selectList("JE_CORE_ENDUSER","and USERID = '" + userId + "'");
- if (users.size() <= 0) {
- continue;
- }
- String[] res = getRes(executionId);
- if (res.length > 6 && !res[4].equals(" ")) { //返回了所有参数
- funcCode = res[0];
- funcName = res[1];
- tableName = res[2];
- funcId = res[3];
- pkValue = res[4];
- context = "您有一条" + funcName + "的流程已经超过4小时未审批,请您及时审批。";
- //pcShowFunc="<a href="javascript:void(0)" onclick="JE.showFunc(" + funcCode + ",{type:'form',id:"+pkValue+",readOnly:true })">查看</a>";
- List<UserMsgAppInfo> userMsgAppInfos = Lists.newArrayList();
- net.sf.json.JSONObject params = new net.sf.json.JSONObject();
- params.put("pkValue", pkValue);
- UserMsgAppInfo appInfo = new UserMsgAppInfo("流程审核", "APPFUNC", AppFunc, "form", params);
- userMsgAppInfos.add(appInfo);
- title = funcName + "流程审批提醒";
- userMsgManaer.sendMsg(userId, title, context, "MSG", pkValue, userMsgAppInfos);
- String wxTitle = funcName + "提醒";
- DynaBean dynaBean=serviceTemplate.selectOneByPk(tableName,pkValue);
- if (dynaBean == null ) {
- continue;
- }
- StringBuffer context1 = new StringBuffer(context);
- SendGzhMsg(dynaBean,wxTitle,context1,pkValue,userId,funcId);
- }
- }
- }
复制代码
五、总结(可选)
系统设置定时任务比较简单,设置好之后直接写对应的service代码即可。
六、关键字
定时任务、发送微信公众号消息、
|
|