!7 修改后端对json数据的接收方式,使用JacksonTypeHandler来做读取写入时的自动处理
Merge pull request !7 from new_new_new/feature/task_json_object
This commit is contained in:
+4
-3
@@ -19,6 +19,7 @@ import org.jeecg.common.system.vo.LoginUser;
|
|||||||
import org.jeecg.common.util.oConvertUtils;
|
import org.jeecg.common.util.oConvertUtils;
|
||||||
import org.jeecg.modules.extbpm.process.service.impl.BpmBaseExtApiImpl;
|
import org.jeecg.modules.extbpm.process.service.impl.BpmBaseExtApiImpl;
|
||||||
import org.jeecg.modules.tasktask.constant.FlowConstants;
|
import org.jeecg.modules.tasktask.constant.FlowConstants;
|
||||||
|
import org.jeecg.modules.tasktask.dto.RecurringTaskDTO;
|
||||||
import org.jeecg.modules.tasktask.entity.TaskTask;
|
import org.jeecg.modules.tasktask.entity.TaskTask;
|
||||||
import org.jeecg.modules.tasktask.mapper.TaskTaskMapper;
|
import org.jeecg.modules.tasktask.mapper.TaskTaskMapper;
|
||||||
import org.jeecg.modules.tasktask.service.ITaskTaskService;
|
import org.jeecg.modules.tasktask.service.ITaskTaskService;
|
||||||
@@ -108,14 +109,14 @@ public class TaskTaskController extends JeecgController<TaskTask, ITaskTaskServi
|
|||||||
/**
|
/**
|
||||||
* 添加
|
* 添加
|
||||||
*
|
*
|
||||||
* @param taskTask
|
* @param recurringTaskDTO
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@AutoLog(value = "事项任务计划表(发起周期性流程)-添加")
|
@AutoLog(value = "事项任务计划表(发起周期性流程)-添加")
|
||||||
@Operation(summary = "事项任务计划表(发起周期性流程)-添加")
|
@Operation(summary = "事项任务计划表(发起周期性流程)-添加")
|
||||||
@RequiresPermissions("tasktask:task_task:add")
|
@RequiresPermissions("tasktask:task_task:add")
|
||||||
@PostMapping(value = "/flow-schedules")
|
@PostMapping(value = "/flow-schedules")
|
||||||
public Result<?> addRecurringTask(@RequestBody TaskTask taskTask, Integer intervalType, Integer startCount) {
|
public Result<?> addRecurringTask(@RequestBody RecurringTaskDTO recurringTaskDTO) throws Exception {
|
||||||
// 获取用户信息
|
// 获取用户信息
|
||||||
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
||||||
String username = sysUser.getUsername();
|
String username = sysUser.getUsername();
|
||||||
@@ -126,7 +127,7 @@ public class TaskTaskController extends JeecgController<TaskTask, ITaskTaskServi
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 业务逻辑全部交给 Service
|
// 业务逻辑全部交给 Service
|
||||||
return taskTaskService.handleFlowStart(taskTask, username, intervalType, startCount);
|
return taskTaskService.handleFlowStart(recurringTaskDTO.getTaskTask(), username, recurringTaskDTO.getIntervalType(), recurringTaskDTO.getStartCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
package org.jeecg.modules.tasktask.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import org.jeecg.modules.tasktask.entity.TaskTask;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class RecurringTaskDTO {
|
||||||
|
private TaskTask taskTask; // 或者直接展开 TaskTask 的属性
|
||||||
|
private Integer intervalType;
|
||||||
|
private Integer startCount;
|
||||||
|
}
|
||||||
+7
-29
@@ -4,10 +4,10 @@ import java.io.Serializable;
|
|||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import java.util.Map;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
|
||||||
import org.jeecg.common.constant.ProvinceCityArea;
|
import org.jeecg.common.constant.ProvinceCityArea;
|
||||||
import org.jeecg.common.util.SpringContextUtils;
|
import org.jeecg.common.util.SpringContextUtils;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -26,7 +26,7 @@ import lombok.experimental.Accessors;
|
|||||||
* @Version: V1.0
|
* @Version: V1.0
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@TableName("task_task")
|
@TableName(value = "task_task", autoResultMap = true)
|
||||||
@Accessors(chain = true)
|
@Accessors(chain = true)
|
||||||
@EqualsAndHashCode(callSuper = false)
|
@EqualsAndHashCode(callSuper = false)
|
||||||
@Schema(description="事项任务计划表(发起流程)")
|
@Schema(description="事项任务计划表(发起流程)")
|
||||||
@@ -235,29 +235,7 @@ public class TaskTask implements Serializable {
|
|||||||
@Schema(description = "1立即发起且非周期性发起,2不立即发起但周期性发起,3立即发起且周期性发起")
|
@Schema(description = "1立即发起且非周期性发起,2不立即发起但周期性发起,3立即发起且周期性发起")
|
||||||
private java.lang.Integer triggerType;
|
private java.lang.Integer triggerType;
|
||||||
|
|
||||||
private byte[] jsonData;
|
@TableField(typeHandler = JacksonTypeHandler.class)
|
||||||
|
private Map<String, Object> jsonData;
|
||||||
|
|
||||||
public byte[] getJsonData(){
|
|
||||||
if(jsonDataString==null){
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
return jsonDataString.getBytes("UTF-8");
|
|
||||||
} catch (UnsupportedEncodingException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getJsonDataString(){
|
|
||||||
if(jsonData==null || jsonData.length==0){
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
return new String(jsonData,"UTF-8");
|
|
||||||
} catch (UnsupportedEncodingException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -13,5 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
|||||||
public interface ITaskTaskService extends IService<TaskTask> {
|
public interface ITaskTaskService extends IService<TaskTask> {
|
||||||
boolean singleFlowStart(TaskTask taskTask,String userName) throws Exception;
|
boolean singleFlowStart(TaskTask taskTask,String userName) throws Exception;
|
||||||
boolean multiFlowStart(TaskTask taskTask,String userName,Integer intervalType, Integer startCount) throws Exception;
|
boolean multiFlowStart(TaskTask taskTask,String userName,Integer intervalType, Integer startCount) throws Exception;
|
||||||
Result<?> handleFlowStart(TaskTask taskTask, String username, Integer intervalType, Integer startCount);
|
Result<?> handleFlowStart(TaskTask taskTask, String username, Integer intervalType, Integer startCount)throws Exception;
|
||||||
}
|
}
|
||||||
|
|||||||
+26
-25
@@ -33,15 +33,6 @@ public class TaskTaskServiceImpl extends ServiceImpl<TaskTaskMapper, TaskTask> i
|
|||||||
private BpmBaseExtApiImpl bpmBaseExtApiImpl;
|
private BpmBaseExtApiImpl bpmBaseExtApiImpl;
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public boolean singleFlowStart(TaskTask taskTask, String userName) throws Exception {
|
public boolean singleFlowStart(TaskTask taskTask, String userName) throws Exception {
|
||||||
if (StringUtils.isBlank(taskTask.getFlowCode())) {
|
|
||||||
throw new IllegalArgumentException("flowCode不能为空");
|
|
||||||
}
|
|
||||||
if (StringUtils.isBlank(taskTask.getBusinessId())) {
|
|
||||||
throw new IllegalArgumentException("businessId不能为空");
|
|
||||||
}
|
|
||||||
if (StringUtils.isBlank(taskTask.getFormUrl())) {
|
|
||||||
throw new IllegalArgumentException("formUrl不能为空");
|
|
||||||
}
|
|
||||||
String jsonString = Optional.ofNullable(taskTask.getJsonData())
|
String jsonString = Optional.ofNullable(taskTask.getJsonData())
|
||||||
.map(JSON::toJSONString) // 使用 Fastjson 或 Jackson
|
.map(JSON::toJSONString) // 使用 Fastjson 或 Jackson
|
||||||
.orElse("{}");
|
.orElse("{}");
|
||||||
@@ -73,9 +64,9 @@ public class TaskTaskServiceImpl extends ServiceImpl<TaskTaskMapper, TaskTask> i
|
|||||||
}
|
}
|
||||||
return this.saveBatch(temTaskList);
|
return this.saveBatch(temTaskList);
|
||||||
}
|
}
|
||||||
public Result<?> handleFlowStart(TaskTask taskTask, String username, Integer intervalType, Integer startCount) throws Exception {
|
public Result<?> handleFlowStart(TaskTask taskTask, String username, Integer intervalType, Integer startCount) throws Exception{
|
||||||
// 1. 显式校验:代替 Assert
|
// 1. 显式校验:代替 Assert
|
||||||
Result<?> checkResult = validateBusinessParams(taskTask, startCount);
|
Result<?> checkResult = validateBusinessParams(taskTask);
|
||||||
if (!checkResult.isSuccess()) {
|
if (!checkResult.isSuccess()) {
|
||||||
return checkResult; // 校验不通过直接返回错误
|
return checkResult; // 校验不通过直接返回错误
|
||||||
}
|
}
|
||||||
@@ -89,20 +80,6 @@ public class TaskTaskServiceImpl extends ServiceImpl<TaskTaskMapper, TaskTask> i
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (FlowConstants.Strategy.RECURRING_ONLY.equals(triggerType)) {
|
if (FlowConstants.Strategy.RECURRING_ONLY.equals(triggerType)) {
|
||||||
boolean success = multiFlowStart(taskTask, username, intervalType, startCount);
|
|
||||||
return success ? Result.ok("周期性流程添加成功") : Result.error("周期性流程添加失败");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 3. 保底处理
|
|
||||||
return Result.error("未知的触发类型: " + triggerType);
|
|
||||||
}
|
|
||||||
private Result<?> validateBusinessParams(TaskTask taskTask, Integer startCount) {
|
|
||||||
if (taskTask.getTriggerType() == null) {
|
|
||||||
return Result.error("触发类型不能为空");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果是周期任务,校验次数和开始时间
|
|
||||||
if (FlowConstants.Strategy.RECURRING_ONLY.equals(taskTask.getTriggerType())) {
|
|
||||||
if (startCount == null || startCount <= 0) {
|
if (startCount == null || startCount <= 0) {
|
||||||
return Result.error("周期任务生成数量必须大于0");
|
return Result.error("周期任务生成数量必须大于0");
|
||||||
}
|
}
|
||||||
@@ -112,7 +89,31 @@ public class TaskTaskServiceImpl extends ServiceImpl<TaskTaskMapper, TaskTask> i
|
|||||||
if (taskTask.getStartTime() == null) {
|
if (taskTask.getStartTime() == null) {
|
||||||
return Result.error("周期性流程开始时间不能为空");
|
return Result.error("周期性流程开始时间不能为空");
|
||||||
}
|
}
|
||||||
|
boolean success = multiFlowStart(taskTask, username, intervalType, startCount);
|
||||||
|
return success ? Result.ok("周期性流程添加成功") : Result.error("周期性流程添加失败");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 3. 保底处理
|
||||||
|
return Result.error("未知的触发类型: " + triggerType);
|
||||||
|
}
|
||||||
|
private Result<?> validateBusinessParams(TaskTask taskTask) {
|
||||||
|
if(taskTask == null){
|
||||||
|
return Result.error("Task对象不能未空");
|
||||||
|
}
|
||||||
|
if (taskTask.getTriggerType() == null) {
|
||||||
|
return Result.error("触发类型不能为空");
|
||||||
|
}
|
||||||
|
//立即督办或周期性督办都需要该校验流程
|
||||||
|
if (StringUtils.isBlank(taskTask.getFlowCode())) {
|
||||||
|
return Result.error("flowCode不能为空");
|
||||||
|
}
|
||||||
|
if (StringUtils.isBlank(taskTask.getBusinessId())) {
|
||||||
|
return Result.error("businessId不能为空");
|
||||||
|
}
|
||||||
|
if (StringUtils.isBlank(taskTask.getFormUrl())) {
|
||||||
|
return Result.error("formUrl不能为空");
|
||||||
|
}
|
||||||
|
|
||||||
return Result.ok();
|
return Result.ok();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user