From 9122bbc2defd1bbef5dcfaaf906651489ad1095d Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Mon, 22 May 2023 14:46:11 +0800
Subject: [PATCH] 定时任务查询,新增定时任务关联,智能外呼定时任务创建
---
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java | 56 ++++++-
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/mapper/XxlJobInfoMapper.xml | 22 +++
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/service/IXxlJobInfoService.java | 23 +++
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/entity/XxlJobInfoType.java | 29 ++++
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/service/impl/XxlJobInfoServiceImpl.java | 46 ++++++
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/vo/XxlJobInfoVO.java | 20 ++
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/mapper/XxlJobInfoMapper.java | 20 ++
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/controller/TaskXxlJobController.java | 126 ++++++++++++++++++
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/jobhandler/SampleXxlJob.java | 29 ++++
9 files changed, 358 insertions(+), 13 deletions(-)
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java
index ac9d460..2c16f77 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java
@@ -377,20 +377,52 @@
}
// 先取差集
List<Scene> sceneList = totalList.stream().filter(item -> !list.contains(item.getPhone())).collect(Collectors.toList());
- // 再随机抽取对应人员手机号
- Set<Scene> hashSet = new HashSet<>();
- Random random =new Random();
- for(int i=0;i<sceneList.size();i++){
- // 获取随机数作为下标索引
- int num = random.nextInt(sceneList.size());
- // 保存到 hashSet ,保证唯一
- hashSet.add(sceneList.get(num));
- // 数量达到预期设定退出循环
- if (hashSet.size()==personNumber){
- break;
+ // 如果差集数量不够 预定的数量(超汛情况),则从未超汛情况数据中补齐预定的数量
+ if (sceneList.size()<personNumber){
+ Map<String, Object> map = new HashMap<>();
+ map.put("isOver",0);
+ // 查询未超汛的数据
+ JSONArray jsonArray = getZtWaterMangerData(map);
+ // 过滤得到手机号集合(排查手机号为null的数据)
+ List<Scene> sceneListNoOver = filterJsonToList(jsonArray);
+ // 取差集
+ List<Scene> differenceSceneListNoOver = sceneListNoOver.stream().filter(item -> !list.contains(item.getPhone())).collect(Collectors.toList());
+ // 再随机抽取对应人员手机号
+ Set<Scene> hashSet = new HashSet<>();
+ // 先将超汛的加入集合
+ for (Scene scene : sceneList) {
+ hashSet.add(scene);
}
+ // 未超汛的补充
+ personNumber = personNumber - sceneList.size();
+ Random random = new Random();
+ for (int i = 0; i < differenceSceneListNoOver.size(); i++) {
+ // 获取随机数作为下标索引
+ int num = random.nextInt(differenceSceneListNoOver.size());
+ // 保存到 hashSet ,保证唯一
+ hashSet.add(differenceSceneListNoOver.get(num));
+ // 数量达到预期设定退出循环
+ if (hashSet.size() == personNumber) {
+ break;
+ }
+ }
+ return hashSet;
+ }else {
+ // 再随机抽取对应人员手机号
+ Set<Scene> hashSet = new HashSet<>();
+ Random random = new Random();
+ for (int i = 0; i < sceneList.size(); i++) {
+ // 获取随机数作为下标索引
+ int num = random.nextInt(sceneList.size());
+ // 保存到 hashSet ,保证唯一
+ hashSet.add(sceneList.get(num));
+ // 数量达到预期设定退出循环
+ if (hashSet.size() == personNumber) {
+ break;
+ }
+ }
+ return hashSet;
}
- return hashSet;
}
/**
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/controller/TaskXxlJobController.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/controller/TaskXxlJobController.java
new file mode 100644
index 0000000..6f387f4
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/controller/TaskXxlJobController.java
@@ -0,0 +1,126 @@
+package cn.gistack.sm.xxljob.controller;
+
+import cn.gistack.sm.xxljob.entity.XxlJobInfo;
+import cn.gistack.sm.xxljob.service.IXxlJobInfoService;
+import cn.gistack.sm.xxljob.vo.XxlJobInfoVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+
+/**
+ * @author zhongrj
+ * @date 2023-05-22
+ */
+@Slf4j
+@Api(tags="定时任务")
+@RestController
+@AllArgsConstructor
+@RequestMapping("/xxl-job/xxl-job")
+public class TaskXxlJobController {
+
+ private IXxlJobInfoService xxlJobInfoService;
+
+ @ApiOperation(value="定时任务-分页列表查询", notes="定时任务-分页列表查询")
+ @GetMapping(value = "/list")
+ public R list(XxlJobInfo xxlJobInfo, Query query) {
+ IPage<XxlJobInfo> pageList = xxlJobInfoService.page(Condition.getPage(query), Condition.getQueryWrapper(xxlJobInfo));
+ return R.data(pageList);
+ }
+
+ /**
+ * 自定义分页查询定时任务列表信息
+ * @param xxlJobInfo
+ * @param query
+ * @return
+ */
+ @ApiOperation(value="定时任务-自定义分页查询定时任务列表信息", notes="定时任务-自定义分页查询定时任务列表信息")
+ @GetMapping(value = "/page")
+ public R selectXxlJobPage(XxlJobInfoVO xxlJobInfo, Query query) {
+ IPage<XxlJobInfoVO> pageList = xxlJobInfoService.selectXxlJobPage(Condition.getPage(query), xxlJobInfo);
+ return R.data(pageList);
+ }
+
+ /**
+ * 通过id查询
+ *
+ * @param id
+ * @return
+ */
+ @ApiOperation(value = "定时任务-通过id查询", notes = "定时任务-通过id查询")
+ @GetMapping(value = "/queryById")
+ public R queryById(@RequestParam(name = "id", required = true) String id) {
+ XxlJobInfo xxlJobInfo = xxlJobInfoService.getById(id);
+ return R.data(xxlJobInfo);
+ }
+
+ /**
+ * 添加
+ */
+ @ApiOperation(value="定时任务-添加", notes="定时任务-添加")
+ @PostMapping(value = "/add")
+ public R add(@RequestBody XxlJobInfo xxlJobInfo) {
+ return R.data(xxlJobInfoService.save(xxlJobInfo));
+ }
+
+ /**
+ * 添加-自定义
+ */
+ @ApiOperation(value="定时任务-添加", notes="定时任务-添加")
+ @PostMapping(value = "/save")
+ public R save(@RequestBody XxlJobInfoVO xxlJobInfo) {
+ return R.data(xxlJobInfoService.saveXxlJob(xxlJobInfo));
+ }
+
+ /**
+ * 编辑
+ * @return
+ */
+ @ApiOperation(value="定时任务-编辑", notes="定时任务-编辑")
+ @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+ public R edit(@RequestBody XxlJobInfo xxlJobInfo) {
+ return R.data(xxlJobInfoService.updateById(xxlJobInfo));
+ }
+
+ /**
+ * 编辑--自定义
+ * @return
+ */
+ @ApiOperation(value="定时任务-编辑", notes="定时任务-编辑")
+ @RequestMapping(value = "/update", method = {RequestMethod.PUT,RequestMethod.POST})
+ public R update(@RequestBody XxlJobInfoVO xxlJobInfo) {
+ return R.data(xxlJobInfoService.updateXxlJobById(xxlJobInfo));
+ }
+
+ /**
+ * 通过id删除
+ *
+ * @param id
+ * @return
+ */
+ @ApiOperation(value="定时任务-通过id删除", notes="定时任务-通过id删除")
+ @DeleteMapping(value = "/delete")
+ public R delete(@RequestParam(name="id",required=true) String id) {
+ return R.data(xxlJobInfoService.removeById(id));
+ }
+
+ /**
+ * 批量删除
+ *
+ * @param ids
+ * @return
+ */
+ @ApiOperation(value="定时任务-批量删除", notes="定时任务-批量删除")
+ @DeleteMapping(value = "/deleteBatch")
+ public R deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+ return R.data(xxlJobInfoService.removeByIds(Arrays.asList(ids.split(","))));
+ }
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/entity/XxlJobInfoType.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/entity/XxlJobInfoType.java
new file mode 100644
index 0000000..00fac22
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/entity/XxlJobInfoType.java
@@ -0,0 +1,29 @@
+package cn.gistack.sm.xxljob.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 任务信息类型关联信息
+ * @author zhongrj
+ * @date 2023-05-22
+ */
+@Data
+public class XxlJobInfoType implements Serializable {
+
+ /**
+ * 主键id
+ */
+ private Integer id;
+
+ /**
+ * 任务信息id
+ */
+ private Integer xxlJobInfoId;
+
+ /**
+ * 任务类型名称
+ */
+ private String typeName;
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/jobhandler/SampleXxlJob.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/jobhandler/SampleXxlJob.java
index d2b8e28..649ee02 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/jobhandler/SampleXxlJob.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/jobhandler/SampleXxlJob.java
@@ -1,5 +1,6 @@
package cn.gistack.sm.xxljob.jobhandler;
+import cn.gistack.sm.intelligentCall.service.CallService;
import cn.gistack.sm.patrol.entity.PatrolTask;
import cn.gistack.sm.patrol.service.IPatrolTaskService;
import cn.gistack.sm.sjztmd.entity.PatrolResponsiblePerson;
@@ -22,7 +23,9 @@
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Date;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
@@ -40,9 +43,12 @@
private final IAttResManagePersonService attResManagePersonService;
- public SampleXxlJob(IPatrolTaskService patrolTaskService, IAttResManagePersonService attResManagePersonService) {
+ private final CallService callService;
+
+ public SampleXxlJob(IPatrolTaskService patrolTaskService, IAttResManagePersonService attResManagePersonService, CallService callService) {
this.patrolTaskService = patrolTaskService;
this.attResManagePersonService = attResManagePersonService;
+ this.callService = callService;
}
/**
@@ -60,6 +66,27 @@
}
/**
+ * 智能外呼任务创建定时执行器
+ * @param param
+ * @return
+ * @throws Exception
+ */
+ @XxlJob("outCallCreateTaskHandle")
+ public ReturnT<String> outCallCreateTaskHandle(String param){
+ XxlJobLogger.log("开始执行任务...");
+ JSONObject jsonParam = JSON.parseObject(param);
+ Map<String, Object> map = new HashMap<>();
+ map.put("isOver",jsonParam.getString("isOver"));
+ map.put("taskScheduleTime",jsonParam.getString("taskScheduleTime"));
+ map.put("personNumber",jsonParam.getString("personNumber"));
+ map.put("day",jsonParam.getString("day"));
+ // 创建外呼任务
+ callService.createCallTaskByParam(map);
+ XxlJobLogger.log("结束自动创建任务...");
+ return ReturnT.SUCCESS;
+ }
+
+ /**
* 给巡查责任人定时创建任务执行器
* @param param
* @return
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/mapper/XxlJobInfoMapper.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/mapper/XxlJobInfoMapper.java
index a5c26d7..4a030e8 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/mapper/XxlJobInfoMapper.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/mapper/XxlJobInfoMapper.java
@@ -1,7 +1,13 @@
package cn.gistack.sm.xxljob.mapper;
import cn.gistack.sm.xxljob.entity.XxlJobInfo;
+import cn.gistack.sm.xxljob.entity.XxlJobInfoType;
+import cn.gistack.sm.xxljob.vo.XxlJobInfoVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
/**
* @PROJECT_NAME: skjcmanager
@@ -12,4 +18,18 @@
public interface XxlJobInfoMapper extends BaseMapper<XxlJobInfo> {
+ /**
+ * 自定义分页查询定时任务列表信息
+ * @param xxlJobInfo
+ * @param page
+ * @return
+ */
+ List<XxlJobInfoVO> selectXxlJobPage(IPage<XxlJobInfoVO> page,@Param("xxlJobInfo") XxlJobInfoVO xxlJobInfo);
+
+ /**
+ * 新增 xxlJobInfoType 信息
+ * @param xxlJobInfoType
+ * @return
+ */
+ Integer insertXxlJobInfoType(@Param("xxlJobInfoType")XxlJobInfoType xxlJobInfoType);
}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/mapper/XxlJobInfoMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/mapper/XxlJobInfoMapper.xml
index f65e043..630f8d3 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/mapper/XxlJobInfoMapper.xml
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/mapper/XxlJobInfoMapper.xml
@@ -2,5 +2,27 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.gistack.sm.xxljob.mapper.XxlJobInfoMapper">
+ <!--自定义分页查询定时任务列表信息-->
+ <select id="selectXxlJobPage" resultType="cn.gistack.sm.xxljob.vo.XxlJobInfoVO">
+ select xji.* from YWXT_JOB.xxl_job_info xji
+ left join YWXT.xxl_job_info_type xjit on xji.id = xjit.xxl_job_info_id
+ where 1=1
+ <if test="xxlJobInfo.typeName!=null and xxlJobInfo.typeName!=''">
+ and xjit.type_name = #{xxlJobInfo.typeName}
+ </if>
+ <if test="xxlJobInfo.author!=null and xxlJobInfo.author!=''">
+ and xji.author like concat(concat('%',#{xxlJobInfo.author}),'%')
+ </if>
+ <if test="xxlJobInfo.triggerStatus!=null">
+ and xji.trigger_status = #{xxlJobInfo.triggerStatus}
+ </if>
+ </select>
+
+ <!--自定义新增-->
+ <insert id="insertXxlJobInfoType">
+ insert into YWXT.xxl_job_info_type(xxl_job_info_id,type_name)
+ values
+ (#{xxlJobInfoType.xxlJobInfoId},#{xxlJobInfoType.typeName})
+ </insert>
</mapper>
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/service/IXxlJobInfoService.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/service/IXxlJobInfoService.java
index 0365803..cb0803a 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/service/IXxlJobInfoService.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/service/IXxlJobInfoService.java
@@ -1,6 +1,8 @@
package cn.gistack.sm.xxljob.service;
import cn.gistack.sm.xxljob.entity.XxlJobInfo;
+import cn.gistack.sm.xxljob.vo.XxlJobInfoVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
/**
@@ -11,4 +13,25 @@
*/
public interface IXxlJobInfoService extends IService<XxlJobInfo> {
+ /**
+ * 自定义新增定时任务
+ * @param xxlJobInfo
+ * @return
+ */
+ Object saveXxlJob(XxlJobInfoVO xxlJobInfo);
+
+ /**
+ * 自定义修改定时任务
+ * @param xxlJobInfo
+ * @return
+ */
+ Object updateXxlJobById(XxlJobInfoVO xxlJobInfo);
+
+ /**
+ * 自定义分页查询定时任务列表信息
+ * @param xxlJobInfo
+ * @param page
+ * @return
+ */
+ IPage<XxlJobInfoVO> selectXxlJobPage(IPage<XxlJobInfoVO> page, XxlJobInfoVO xxlJobInfo);
}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/service/impl/XxlJobInfoServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/service/impl/XxlJobInfoServiceImpl.java
index 5c70bb3..1be5f8b 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/service/impl/XxlJobInfoServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/service/impl/XxlJobInfoServiceImpl.java
@@ -1,9 +1,12 @@
package cn.gistack.sm.xxljob.service.impl;
import cn.gistack.sm.xxljob.entity.XxlJobInfo;
+import cn.gistack.sm.xxljob.entity.XxlJobInfoType;
import cn.gistack.sm.xxljob.mapper.XxlJobInfoMapper;
import cn.gistack.sm.xxljob.service.IXxlJobInfoService;
+import cn.gistack.sm.xxljob.vo.XxlJobInfoVO;
import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@@ -17,4 +20,47 @@
@DS("xxljob")
public class XxlJobInfoServiceImpl extends ServiceImpl<XxlJobInfoMapper, XxlJobInfo> implements IXxlJobInfoService {
+ /**
+ * 自定义新增定时任务
+ * @param xxlJobInfo
+ * @return
+ */
+ @Override
+ public Object saveXxlJob(XxlJobInfoVO xxlJobInfo) {
+ boolean flag = false;
+ boolean save = save(xxlJobInfo);
+ if (save){
+ XxlJobInfoType xxlJobInfoType = new XxlJobInfoType();
+ xxlJobInfoType.setXxlJobInfoId(xxlJobInfo.getId());
+ xxlJobInfoType.setTypeName(xxlJobInfo.getTypeName());
+ // 插入成功则
+ Integer insert = baseMapper.insertXxlJobInfoType(xxlJobInfoType);
+ if (insert >0){
+ flag = true;
+ }
+ }
+ return flag;
+ }
+
+ /**
+ * 自定义修改定时任务
+ * @param xxlJobInfo
+ * @return
+ */
+ @Override
+ public Object updateXxlJobById(XxlJobInfoVO xxlJobInfo) {
+ boolean update = updateById(xxlJobInfo);
+ return update;
+ }
+
+ /**
+ * 自定义分页查询定时任务列表信息
+ * @param xxlJobInfo
+ * @param page
+ * @return
+ */
+ @Override
+ public IPage<XxlJobInfoVO> selectXxlJobPage(IPage<XxlJobInfoVO> page, XxlJobInfoVO xxlJobInfo) {
+ return page.setRecords(baseMapper.selectXxlJobPage(page,xxlJobInfo));
+ }
}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/vo/XxlJobInfoVO.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/vo/XxlJobInfoVO.java
new file mode 100644
index 0000000..d113510
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/xxljob/vo/XxlJobInfoVO.java
@@ -0,0 +1,20 @@
+package cn.gistack.sm.xxljob.vo;
+
+import cn.gistack.sm.xxljob.entity.XxlJobInfo;
+import lombok.Data;
+
+/**
+ * xxljobvo
+ * @author zhongrj
+ * @date 2023-05-22
+ */
+@Data
+public class XxlJobInfoVO extends XxlJobInfo {
+
+ /**
+ * xxl-job 类型名称
+ */
+ private String typeName;
+
+
+}
--
Gitblit v1.9.3