From a2979b5df06744de80c6be6218260e2fa701cce2 Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Wed, 10 Jan 2024 20:27:42 +0800
Subject: [PATCH] 新增标签任务处理

---
 src/main/java/org/springblade/xxljob/mapper/JobInfoMapper.xml                                    |   39 +++
 src/main/java/org/springblade/modules/task/service/impl/TaskCampusReportingEventServiceImpl.java |    6 
 src/main/java/org/springblade/modules/task/service/impl/TaskServiceImpl.java                     |   66 +++++
 src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java                   |   15 +
 src/main/java/org/springblade/xxljob/service/IJobInfoService.java                                |   26 ++
 src/main/java/org/springblade/xxljob/entity/JobInfoEntity.java                                   |  134 ++++++++++++
 src/main/java/org/springblade/xxljob/dto/JobInfoDTO.java                                         |   18 +
 src/main/java/org/springblade/xxljob/service/impl/JobInfoServiceImpl.java                        |   26 ++
 src/main/java/org/springblade/xxljob/mapper/JobInfoMapper.java                                   |   27 ++
 src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml                               |   19 +
 src/main/java/org/springblade/xxljob/vo/JobInfoVO.java                                           |   18 +
 src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java                              |    8 
 src/main/java/org/springblade/modules/place/service/IPlaceService.java                           |    9 
 src/main/java/org/springblade/modules/task/service/ITaskService.java                             |    8 
 src/main/java/org/springblade/xxljob/controller/JobInfoController.java                           |  109 +++++++++
 src/main/java/org/springblade/modules/task/entity/TaskCampusReportingEventEntity.java            |   34 ++
 src/main/java/org/springblade/xxljob/jobhandler/LabelHandleJob.java                              |   54 ++++
 src/main/java/org/springblade/modules/place/vo/PlaceVO.java                                      |    6 
 src/main/java/org/springblade/xxljob/wrapper/JobInfoWrapper.java                                 |   34 +++
 19 files changed, 648 insertions(+), 8 deletions(-)

diff --git a/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java b/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java
index 24b859a..649c88e 100644
--- a/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java
+++ b/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.java
@@ -108,4 +108,12 @@
 	 * @return
 	 */
 	List<PlaceEntity> placeAndRelHandle();
+
+	/**
+	 * 根据标签编号集合查询对应的场所
+	 * @param stringList
+	 * @return
+	 */
+    List<PlaceVO> getPlaceListByParam(@Param("list") List<String> stringList,
+									  @Param("color") String color);
 }
diff --git a/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml b/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml
index 4b69ba0..37d6417 100644
--- a/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml
+++ b/src/main/java/org/springblade/modules/place/mapper/PlaceMapper.xml
@@ -184,4 +184,23 @@
         and jp.is_deleted = 0
         and jp.source !=3
     </select>
+
+    <!--根据标签编号集合查询对应的场所-->
+    <select id="getPlaceListByParam" resultType="org.springblade.modules.place.vo.PlaceVO">
+        select jp.* from jczz_place jp
+        left join jczz_place_poi_label jppl on jppl.place_id = jp.id
+        where jp.is_deleted = 0 and jppl.type = 3
+        and jppl.color = #{color}
+        <choose>
+            <when test="list!=null and list.size()>0">
+                and jppl.poi_code in
+                <foreach collection="list" item="id" separator="," open="(" close=")">
+                    #{id}
+                </foreach>
+            </when>
+            <otherwise>
+                and jppl.poi_code in ('')
+            </otherwise>
+        </choose>
+    </select>
 </mapper>
diff --git a/src/main/java/org/springblade/modules/place/service/IPlaceService.java b/src/main/java/org/springblade/modules/place/service/IPlaceService.java
index ed10cab..bcb325e 100644
--- a/src/main/java/org/springblade/modules/place/service/IPlaceService.java
+++ b/src/main/java/org/springblade/modules/place/service/IPlaceService.java
@@ -17,6 +17,7 @@
 package org.springblade.modules.place.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.apache.ibatis.annotations.Param;
 import org.springblade.common.node.TreeStringNode;
 import org.springblade.modules.place.entity.PlaceEntity;
 import org.springblade.modules.place.excel.PlaceAndRelExcel;
@@ -121,4 +122,12 @@
 	 * @return
 	 */
     Object placeAndRelHandle();
+
+	/**
+	 * 根据标签编号集合查询对应的场所
+	 * @param stringList
+	 * @param color
+	 * @return
+	 */
+	List<PlaceVO> getPlaceListByParam(List<String> stringList,String color);
 }
diff --git a/src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java b/src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java
index 368740a..937b49a 100644
--- a/src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java
+++ b/src/main/java/org/springblade/modules/place/service/impl/PlaceServiceImpl.java
@@ -542,6 +542,10 @@
 						placeVO.setGrid(gridVO);
 						place.setGridId(gridVO.getId());
 					}
+					// 设置详情信息
+					QueryWrapper<PlaceExtEntity> queryWrapper = new QueryWrapper<>();
+					queryWrapper.eq("is_deleted",0).eq("place_id",placeVO.getId());
+					placeVO.setPlaceExtEntity(placeExtService.getOne(queryWrapper));
 				} else {
 					// 通过定位点落面分析网格位置,反向推出社区派出所相关数据
 
@@ -841,4 +845,15 @@
 		}
 		return null;
 	}
+
+	/**
+	 * 根据标签编号集合查询对应的场所
+	 * @param stringList
+	 * @param color
+	 * @return
+	 */
+	@Override
+	public List<PlaceVO> getPlaceListByParam(List<String> stringList,String color) {
+		return baseMapper.getPlaceListByParam(stringList,color);
+	}
 }
diff --git a/src/main/java/org/springblade/modules/place/vo/PlaceVO.java b/src/main/java/org/springblade/modules/place/vo/PlaceVO.java
index 3e94687..3d2df87 100644
--- a/src/main/java/org/springblade/modules/place/vo/PlaceVO.java
+++ b/src/main/java/org/springblade/modules/place/vo/PlaceVO.java
@@ -24,6 +24,7 @@
 import org.springblade.core.tool.node.INode;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.springblade.modules.place.entity.PlaceExtEntity;
 import org.springblade.modules.place.entity.PlacePoiLabel;
 
 import java.util.ArrayList;
@@ -112,4 +113,9 @@
 	 * 详情id(维护)
 	 */
 	private Long placeExtId;
+
+	/**
+	 * 门牌地址信息
+	 */
+	private PlaceExtEntity placeExtEntity;
 }
diff --git a/src/main/java/org/springblade/modules/task/entity/TaskCampusReportingEventEntity.java b/src/main/java/org/springblade/modules/task/entity/TaskCampusReportingEventEntity.java
index c92394f..93a41a9 100644
--- a/src/main/java/org/springblade/modules/task/entity/TaskCampusReportingEventEntity.java
+++ b/src/main/java/org/springblade/modules/task/entity/TaskCampusReportingEventEntity.java
@@ -16,14 +16,14 @@
  */
 package org.springblade.modules.task.entity;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.util.Date;
 
@@ -214,6 +214,32 @@
 	@TableField("fo_image_urls")
 	private String foImageUrls;
 
+	/**
+	 * 创建时间
+	 */
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty("创建时间")
+	@TableField(fill = FieldFill.INSERT)
+	private Date createTime;
+
+	/**
+	 * 创建人
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty("创建人")
+	@TableField(fill = FieldFill.INSERT)
+	private Long createUser;
+
+	/**
+	 * 来源: 1:主动上报  2:系统自动下发
+	 */
+	@ApiModelProperty(value = "来源: 1:主动上报  2:系统自动下发")
+	private Integer source;
+
+	/**
+	 * 是否已删除 0:否  1:是
+	 */
 	@ApiModelProperty("是否已删除")
 	private Integer isDeleted;
 
diff --git a/src/main/java/org/springblade/modules/task/service/ITaskService.java b/src/main/java/org/springblade/modules/task/service/ITaskService.java
index 9098b40..3faf77f 100644
--- a/src/main/java/org/springblade/modules/task/service/ITaskService.java
+++ b/src/main/java/org/springblade/modules/task/service/ITaskService.java
@@ -70,4 +70,12 @@
 	Boolean removeTask(TaskEntity task);
 
 	IPage<TaskVO> getBailReportingPage(IPage<TaskVO> page, TaskVO task);
+
+	/**
+	 * 根据类型创建任务
+	 * @param reportType 任务/事件类型
+	 * @param color 参数
+	 * @return
+	 */
+    boolean createTaskJob(Integer reportType, String color);
 }
diff --git a/src/main/java/org/springblade/modules/task/service/impl/TaskCampusReportingEventServiceImpl.java b/src/main/java/org/springblade/modules/task/service/impl/TaskCampusReportingEventServiceImpl.java
index b86a423..f89b723 100644
--- a/src/main/java/org/springblade/modules/task/service/impl/TaskCampusReportingEventServiceImpl.java
+++ b/src/main/java/org/springblade/modules/task/service/impl/TaskCampusReportingEventServiceImpl.java
@@ -27,6 +27,8 @@
 import org.springblade.modules.task.service.ITaskCampusReportingEventService;
 import org.springblade.modules.task.service.ITaskService;
 import org.springblade.modules.task.vo.TaskCampusReportingEventVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -41,8 +43,10 @@
 @Service
 public class TaskCampusReportingEventServiceImpl extends ServiceImpl<TaskCampusReportingEventMapper, TaskCampusReportingEventEntity> implements ITaskCampusReportingEventService {
 
-	@Resource
+	@Autowired
+	@Lazy
 	private ITaskService taskService;
+
 	@Override
 	public IPage<TaskCampusReportingEventVO> selectTaskCampusReportingEventPage(IPage<TaskCampusReportingEventVO> page, TaskCampusReportingEventVO taskCampusReportingEvent) {
 		return page.setRecords(baseMapper.selectTaskCampusReportingEventPage(page, taskCampusReportingEvent));
diff --git a/src/main/java/org/springblade/modules/task/service/impl/TaskServiceImpl.java b/src/main/java/org/springblade/modules/task/service/impl/TaskServiceImpl.java
index 85c64c4..73c5687 100644
--- a/src/main/java/org/springblade/modules/task/service/impl/TaskServiceImpl.java
+++ b/src/main/java/org/springblade/modules/task/service/impl/TaskServiceImpl.java
@@ -17,16 +17,22 @@
 package org.springblade.modules.task.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import org.apache.commons.lang3.StringUtils;
+import org.springblade.common.constant.DictConstant;
 import org.springblade.common.utils.SpringUtils;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.modules.category.entity.CategoryEntity;
+import org.springblade.modules.category.service.ICategoryService;
 import org.springblade.modules.house.service.IHouseRentalService;
 import org.springblade.modules.house.service.IHouseholdService;
 import org.springblade.modules.house.vo.HouseRentalTenantVO;
 import org.springblade.modules.place.service.IPlaceExtService;
+import org.springblade.modules.place.service.IPlaceService;
+import org.springblade.modules.place.vo.PlaceVO;
 import org.springblade.modules.system.entity.Dept;
 import org.springblade.modules.system.service.IDeptService;
 import org.springblade.modules.task.entity.*;
@@ -35,11 +41,13 @@
 import org.springblade.modules.task.vo.TaskVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 任务表 服务实现类
@@ -50,8 +58,8 @@
 @Service
 public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, TaskEntity> implements ITaskService {
 
-	// @Autowired
-	// private ITaskReportForRepairsService iTaskReportForRepairsService;
+	 @Autowired
+	 private IPlaceService placeService;
 
 	@Autowired
 	private IHouseholdService iHouseholdService;
@@ -59,9 +67,14 @@
 	@Autowired
 	private IHouseRentalService iHouseRentalService;
 
-
 	@Autowired
 	private IDeptService deptService;
+
+	@Autowired
+	private ICategoryService categoryService;
+
+	@Autowired
+	private ITaskCampusReportingEventService taskCampusReportingEventService;
 
 	@Override
 	public IPage<TaskVO> selectTaskPage(IPage<TaskVO> page, TaskVO task) {
@@ -268,4 +281,51 @@
 
 		return update1;
 	}
+
+	/**
+	 * 根据类型创建任务
+	 * @param reportType 任务/事件类型
+	 * @param color 参数
+	 * @return
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean createTaskJob(Integer reportType, String color) {
+		boolean flag = false;
+		if (reportType==6){
+			// 校园安全自查,查询标签为教育的场所 parentNo = 1601
+			String parentNo = "1601";
+			QueryWrapper<CategoryEntity> wrapper = new QueryWrapper<>();
+			wrapper.eq("is_deleted",0).eq("parent_no",parentNo);
+			List<CategoryEntity> categoryEntityList = categoryService.list(wrapper);
+			// 取出编号集合
+			List<String> stringList = categoryEntityList.stream().map(categoryEntity -> categoryEntity.getCategoryNo()).collect(Collectors.toList());
+			// 根据编号集合查询对应的场所
+			List<PlaceVO> placeVOList = placeService.getPlaceListByParam(stringList,color);
+			// 生成任务
+			for (PlaceVO placeVO : placeVOList) {
+				TaskEntity taskEntity = new TaskEntity();
+				taskEntity.setType(1);
+				taskEntity.setName(DictConstant.CAMPUS_SECURITY_INSPECTION);
+				taskEntity.setFrequency(2);
+				taskEntity.setCreateTime(new Date());
+				taskEntity.setHouseCode(placeVO.getHouseCode());
+				taskEntity.setReportType(reportType);
+				// 新增
+				flag = save(taskEntity);
+				// 同时新增校园安全检查任务
+				TaskCampusReportingEventEntity campusReportingEventEntity = new TaskCampusReportingEventEntity();
+				campusReportingEventEntity.setTaskId(taskEntity.getId());
+				campusReportingEventEntity.setPlaceId(placeVO.getId());
+				campusReportingEventEntity.setCheckUserId(placeVO.getPrincipalUserId());
+				campusReportingEventEntity.setCheckUserName(placeVO.getPrincipal());
+				campusReportingEventEntity.setCheckTelephone(placeVO.getPrincipalPhone());
+				// 系统下发
+				campusReportingEventEntity.setSource(2);
+				// 新增
+				taskCampusReportingEventService.save(campusReportingEventEntity);
+			}
+		}
+		return flag;
+	}
 }
diff --git a/src/main/java/org/springblade/xxljob/controller/JobInfoController.java b/src/main/java/org/springblade/xxljob/controller/JobInfoController.java
new file mode 100644
index 0000000..4d598f6
--- /dev/null
+++ b/src/main/java/org/springblade/xxljob/controller/JobInfoController.java
@@ -0,0 +1,109 @@
+package org.springblade.xxljob.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import lombok.AllArgsConstructor;
+import javax.validation.Valid;
+
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.xxljob.entity.JobInfoEntity;
+import org.springblade.xxljob.vo.JobInfoVO;
+import org.springblade.xxljob.wrapper.JobInfoWrapper;
+import org.springblade.xxljob.service.IJobInfoService;
+import org.springblade.core.boot.ctrl.BladeController;
+
+/**
+ * 调度任务信息表 控制器
+ *
+ * @author BladeX
+ * @since 2024-01-10
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("blade-jobInfo/jobInfo")
+@Api(value = "调度任务信息表", tags = "调度任务信息表接口")
+public class JobInfoController extends BladeController {
+
+	private final IJobInfoService jobInfoService;
+
+	/**
+	 * 调度任务信息表 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入jobInfo")
+	public R<JobInfoEntity> detail(JobInfoEntity jobInfo) {
+		JobInfoEntity detail = jobInfoService.getOne(Condition.getQueryWrapper(jobInfo));
+		return R.data(detail);
+	}
+	/**
+	 * 调度任务信息表 分页
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入jobInfo")
+	public R<IPage<JobInfoVO>> list(JobInfoEntity jobInfo, Query query) {
+		IPage<JobInfoEntity> pages = jobInfoService.page(Condition.getPage(query), Condition.getQueryWrapper(jobInfo));
+		return R.data(JobInfoWrapper.build().pageVO(pages));
+	}
+
+	/**
+	 * 调度任务信息表 自定义分页
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入jobInfo")
+	public R<IPage<JobInfoVO>> page(JobInfoVO jobInfo, Query query) {
+		IPage<JobInfoVO> pages = jobInfoService.selectJobInfoPage(Condition.getPage(query), jobInfo);
+		return R.data(pages);
+	}
+
+	/**
+	 * 调度任务信息表 新增
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入jobInfo")
+	public R save(@Valid @RequestBody JobInfoEntity jobInfo) {
+		return R.status(jobInfoService.save(jobInfo));
+	}
+
+	/**
+	 * 调度任务信息表 修改
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入jobInfo")
+	public R update(@Valid @RequestBody JobInfoEntity jobInfo) {
+		return R.status(jobInfoService.updateById(jobInfo));
+	}
+
+	/**
+	 * 调度任务信息表 新增或修改
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入jobInfo")
+	public R submit(@Valid @RequestBody JobInfoEntity jobInfo) {
+		return R.status(jobInfoService.saveOrUpdate(jobInfo));
+	}
+
+	/**
+	 * 调度任务信息表 删除
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "逻辑删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(jobInfoService.deleteLogic(Func.toLongList(ids)));
+	}
+
+
+}
diff --git a/src/main/java/org/springblade/xxljob/dto/JobInfoDTO.java b/src/main/java/org/springblade/xxljob/dto/JobInfoDTO.java
new file mode 100644
index 0000000..16e35b7
--- /dev/null
+++ b/src/main/java/org/springblade/xxljob/dto/JobInfoDTO.java
@@ -0,0 +1,18 @@
+package org.springblade.xxljob.dto;
+
+import org.springblade.xxljob.entity.JobInfoEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 调度任务信息表 数据传输对象实体类
+ *
+ * @author BladeX
+ * @since 2024-01-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class JobInfoDTO extends JobInfoEntity {
+	private static final long serialVersionUID = 1L;
+
+}
diff --git a/src/main/java/org/springblade/xxljob/entity/JobInfoEntity.java b/src/main/java/org/springblade/xxljob/entity/JobInfoEntity.java
new file mode 100644
index 0000000..20b7556
--- /dev/null
+++ b/src/main/java/org/springblade/xxljob/entity/JobInfoEntity.java
@@ -0,0 +1,134 @@
+package org.springblade.xxljob.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.Date;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.tenant.mp.TenantEntity;
+
+/**
+ * 调度任务信息表 实体类
+ *
+ * @author BladeX
+ * @since 2024-01-10
+ */
+@Data
+@TableName("xxl_job_info")
+@ApiModel(value = "JobInfo对象", description = "调度任务信息表")
+@EqualsAndHashCode(callSuper = true)
+public class JobInfoEntity extends TenantEntity {
+
+	/**
+	 * 执行器主键ID
+	 */
+	@ApiModelProperty(value = "执行器主键ID")
+	private Integer jobGroup;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String jobDesc;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private Date addTime;
+	/**
+	 * 作者
+	 */
+	@ApiModelProperty(value = "作者")
+	private String author;
+	/**
+	 * 报警邮件
+	 */
+	@ApiModelProperty(value = "报警邮件")
+	private String alarmEmail;
+	/**
+	 * 调度类型
+	 */
+	@ApiModelProperty(value = "调度类型")
+	private String scheduleType;
+	/**
+	 * 调度配置,值含义取决于调度类型
+	 */
+	@ApiModelProperty(value = "调度配置,值含义取决于调度类型")
+	private String scheduleConf;
+	/**
+	 * 调度过期策略
+	 */
+	@ApiModelProperty(value = "调度过期策略")
+	private String misfireStrategy;
+	/**
+	 * 执行器路由策略
+	 */
+	@ApiModelProperty(value = "执行器路由策略")
+	private String executorRouteStrategy;
+	/**
+	 * 执行器任务handler
+	 */
+	@ApiModelProperty(value = "执行器任务handler")
+	private String executorHandler;
+	/**
+	 * 执行器任务参数
+	 */
+	@ApiModelProperty(value = "执行器任务参数")
+	private String executorParam;
+	/**
+	 * 阻塞处理策略
+	 */
+	@ApiModelProperty(value = "阻塞处理策略")
+	private String executorBlockStrategy;
+	/**
+	 * 任务执行超时时间,单位秒
+	 */
+	@ApiModelProperty(value = "任务执行超时时间,单位秒")
+	private Integer executorTimeout;
+	/**
+	 * 失败重试次数
+	 */
+	@ApiModelProperty(value = "失败重试次数")
+	private Integer executorFailRetryCount;
+	/**
+	 * GLUE类型
+	 */
+	@ApiModelProperty(value = "GLUE类型")
+	private String glueType;
+	/**
+	 * GLUE源代码
+	 */
+	@ApiModelProperty(value = "GLUE源代码")
+	private String glueSource;
+	/**
+	 * GLUE备注
+	 */
+	@ApiModelProperty(value = "GLUE备注")
+	private String glueRemark;
+	/**
+	 * GLUE更新时间
+	 */
+	@ApiModelProperty(value = "GLUE更新时间")
+	private Date glueUpdatetime;
+	/**
+	 * 子任务ID,多个逗号分隔
+	 */
+	@ApiModelProperty(value = "子任务ID,多个逗号分隔")
+	private String childJobid;
+	/**
+	 * 调度状态:0-停止,1-运行
+	 */
+	@ApiModelProperty(value = "调度状态:0-停止,1-运行")
+	private Byte triggerStatus;
+	/**
+	 * 上次调度时间
+	 */
+	@ApiModelProperty(value = "上次调度时间")
+	private Long triggerLastTime;
+	/**
+	 * 下次调度时间
+	 */
+	@ApiModelProperty(value = "下次调度时间")
+	private Long triggerNextTime;
+
+}
diff --git a/src/main/java/org/springblade/xxljob/jobhandler/LabelHandleJob.java b/src/main/java/org/springblade/xxljob/jobhandler/LabelHandleJob.java
new file mode 100644
index 0000000..014dfe2
--- /dev/null
+++ b/src/main/java/org/springblade/xxljob/jobhandler/LabelHandleJob.java
@@ -0,0 +1,54 @@
+package org.springblade.xxljob.jobhandler;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.context.XxlJobHelper;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springblade.modules.task.service.ITaskService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.io.DataOutputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 三色标签定时任务执行器
+ * @author zhongrj
+ * @date 2024-01-10
+ */
+@Component
+public class LabelHandleJob {
+
+    private static Logger logger = LoggerFactory.getLogger(LabelHandleJob.class);
+
+    @Autowired
+	private ITaskService taskService;
+
+    /**
+     * 校园安全自查定时任务-绿色
+     */
+    @XxlJob("campusSecurityJobHandler")
+    public void campusSecurityJobHandler (String param){
+		XxlJobHelper.log("开始执行任务...");
+		JSONObject jsonParam = JSON.parseObject(param);
+		String color = jsonParam.getString("color");
+		// 校园安全检查
+		Integer reportType = 6;
+		// 根据类型创建任务
+		boolean result = taskService.createTaskJob(reportType,color);
+		XxlJobHelper.log("任务响应结果..." + result);
+		// 创建外呼短信发送任务记录
+		XxlJobHelper.log("结束自动创建任务...");
+	}
+
+}
diff --git a/src/main/java/org/springblade/xxljob/mapper/JobInfoMapper.java b/src/main/java/org/springblade/xxljob/mapper/JobInfoMapper.java
new file mode 100644
index 0000000..c1e82af
--- /dev/null
+++ b/src/main/java/org/springblade/xxljob/mapper/JobInfoMapper.java
@@ -0,0 +1,27 @@
+package org.springblade.xxljob.mapper;
+
+import org.springblade.xxljob.entity.JobInfoEntity;
+import org.springblade.xxljob.vo.JobInfoVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * 调度任务信息表 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2024-01-10
+ */
+public interface JobInfoMapper extends BaseMapper<JobInfoEntity> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param jobInfo
+	 * @return
+	 */
+	List<JobInfoVO> selectJobInfoPage(IPage page, JobInfoVO jobInfo);
+
+
+}
diff --git a/src/main/java/org/springblade/xxljob/mapper/JobInfoMapper.xml b/src/main/java/org/springblade/xxljob/mapper/JobInfoMapper.xml
new file mode 100644
index 0000000..572270e
--- /dev/null
+++ b/src/main/java/org/springblade/xxljob/mapper/JobInfoMapper.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.xxljob.mapper.JobInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="jobInfoResultMap" type="org.springblade.xxljob.entity.JobInfoEntity">
+        <result column="id" property="id"/>
+        <result column="job_group" property="jobGroup"/>
+        <result column="job_desc" property="jobDesc"/>
+        <result column="add_time" property="addTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="author" property="author"/>
+        <result column="alarm_email" property="alarmEmail"/>
+        <result column="schedule_type" property="scheduleType"/>
+        <result column="schedule_conf" property="scheduleConf"/>
+        <result column="misfire_strategy" property="misfireStrategy"/>
+        <result column="executor_route_strategy" property="executorRouteStrategy"/>
+        <result column="executor_handler" property="executorHandler"/>
+        <result column="executor_param" property="executorParam"/>
+        <result column="executor_block_strategy" property="executorBlockStrategy"/>
+        <result column="executor_timeout" property="executorTimeout"/>
+        <result column="executor_fail_retry_count" property="executorFailRetryCount"/>
+        <result column="glue_type" property="glueType"/>
+        <result column="glue_source" property="glueSource"/>
+        <result column="glue_remark" property="glueRemark"/>
+        <result column="glue_updatetime" property="glueUpdatetime"/>
+        <result column="child_jobid" property="childJobid"/>
+        <result column="trigger_status" property="triggerStatus"/>
+        <result column="trigger_last_time" property="triggerLastTime"/>
+        <result column="trigger_next_time" property="triggerNextTime"/>
+    </resultMap>
+
+
+    <select id="selectJobInfoPage" resultMap="jobInfoResultMap">
+        select * from xxl_job_info where is_deleted = 0
+    </select>
+
+
+</mapper>
diff --git a/src/main/java/org/springblade/xxljob/service/IJobInfoService.java b/src/main/java/org/springblade/xxljob/service/IJobInfoService.java
new file mode 100644
index 0000000..1833113
--- /dev/null
+++ b/src/main/java/org/springblade/xxljob/service/IJobInfoService.java
@@ -0,0 +1,26 @@
+package org.springblade.xxljob.service;
+
+import org.springblade.xxljob.entity.JobInfoEntity;
+import org.springblade.xxljob.vo.JobInfoVO;
+import org.springblade.core.mp.base.BaseService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 调度任务信息表 服务类
+ *
+ * @author BladeX
+ * @since 2024-01-10
+ */
+public interface IJobInfoService extends BaseService<JobInfoEntity> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param jobInfo
+	 * @return
+	 */
+	IPage<JobInfoVO> selectJobInfoPage(IPage<JobInfoVO> page, JobInfoVO jobInfo);
+
+
+}
diff --git a/src/main/java/org/springblade/xxljob/service/impl/JobInfoServiceImpl.java b/src/main/java/org/springblade/xxljob/service/impl/JobInfoServiceImpl.java
new file mode 100644
index 0000000..7fba17b
--- /dev/null
+++ b/src/main/java/org/springblade/xxljob/service/impl/JobInfoServiceImpl.java
@@ -0,0 +1,26 @@
+package org.springblade.xxljob.service.impl;
+
+import org.springblade.xxljob.entity.JobInfoEntity;
+import org.springblade.xxljob.vo.JobInfoVO;
+import org.springblade.xxljob.mapper.JobInfoMapper;
+import org.springblade.xxljob.service.IJobInfoService;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 调度任务信息表 服务实现类
+ *
+ * @author BladeX
+ * @since 2024-01-10
+ */
+@Service
+public class JobInfoServiceImpl extends BaseServiceImpl<JobInfoMapper, JobInfoEntity> implements IJobInfoService {
+
+	@Override
+	public IPage<JobInfoVO> selectJobInfoPage(IPage<JobInfoVO> page, JobInfoVO jobInfo) {
+		return page.setRecords(baseMapper.selectJobInfoPage(page, jobInfo));
+	}
+
+
+}
diff --git a/src/main/java/org/springblade/xxljob/vo/JobInfoVO.java b/src/main/java/org/springblade/xxljob/vo/JobInfoVO.java
new file mode 100644
index 0000000..1a7ecbe
--- /dev/null
+++ b/src/main/java/org/springblade/xxljob/vo/JobInfoVO.java
@@ -0,0 +1,18 @@
+package org.springblade.xxljob.vo;
+
+import org.springblade.xxljob.entity.JobInfoEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 调度任务信息表 视图实体类
+ *
+ * @author BladeX
+ * @since 2024-01-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class JobInfoVO extends JobInfoEntity {
+	private static final long serialVersionUID = 1L;
+
+}
diff --git a/src/main/java/org/springblade/xxljob/wrapper/JobInfoWrapper.java b/src/main/java/org/springblade/xxljob/wrapper/JobInfoWrapper.java
new file mode 100644
index 0000000..2cce7b3
--- /dev/null
+++ b/src/main/java/org/springblade/xxljob/wrapper/JobInfoWrapper.java
@@ -0,0 +1,34 @@
+package org.springblade.xxljob.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.xxljob.entity.JobInfoEntity;
+import org.springblade.xxljob.vo.JobInfoVO;
+import java.util.Objects;
+
+/**
+ * 调度任务信息表 包装类,返回视图层所需的字段
+ *
+ * @author BladeX
+ * @since 2024-01-10
+ */
+public class JobInfoWrapper extends BaseEntityWrapper<JobInfoEntity, JobInfoVO>  {
+
+	public static JobInfoWrapper build() {
+		return new JobInfoWrapper();
+ 	}
+
+	@Override
+	public JobInfoVO entityVO(JobInfoEntity jobInfo) {
+		JobInfoVO jobInfoVO = Objects.requireNonNull(BeanUtil.copy(jobInfo, JobInfoVO.class));
+
+		//User createUser = UserCache.getUser(jobInfo.getCreateUser());
+		//User updateUser = UserCache.getUser(jobInfo.getUpdateUser());
+		//jobInfoVO.setCreateUserName(createUser.getName());
+		//jobInfoVO.setUpdateUserName(updateUser.getName());
+
+		return jobInfoVO;
+	}
+
+
+}

--
Gitblit v1.9.3