初始代码

This commit is contained in:
wangmingwei
2026-04-21 16:49:46 +08:00
parent aae9dc4036
commit f0453ff3a3
2396 changed files with 256575 additions and 0 deletions

View File

@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>yunzhupaas-visualdev-integrate</artifactId>
<groupId>com.yunzhupaas</groupId>
<version>5.2.0-RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>yunzhupaas-visualdev-integrate-biz</artifactId>
<dependencies>
<dependency>
<groupId>com.yunzhupaas</groupId>
<artifactId>yunzhupaas-visualdev-integrate-entity</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.yunzhupaas</groupId>
<artifactId>yunzhupaas-visualdev-base-biz</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.yunzhupaas</groupId>
<artifactId>yunzhupaas-visualdev-onlinedev-biz</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.yunzhupaas</groupId>
<artifactId>yunzhupaas-provider</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.yunzhupaas</groupId>
<artifactId>yunzhupaas-flowable-biz</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,30 @@
package com.yunzhupaas.integrate.config;
import com.yunzhupaas.integrate.job.IntegrateQueryJobUtil;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class IntegrateConfig {
@Bean
public JobDetail integrateJobDetail() {
JobDetail JobDetail = JobBuilder.newJob(IntegrateQueryJobUtil.class)
.storeDurably() //必须调用该方法,添加任务
.build();
return JobDetail;
}
@Bean
public Trigger integrateTrigger() {
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("* * * * * ?");
Trigger trigger = TriggerBuilder.newTrigger()
.forJob(integrateJobDetail())
.withSchedule(cronScheduleBuilder) //对触发器配置任务
.build();
return trigger;
}
}

View File

@@ -0,0 +1,52 @@
package com.yunzhupaas.integrate.config;
import cn.hutool.core.util.ObjectUtil;
import com.yunzhupaas.base.UserInfo;
import com.yunzhupaas.integrate.job.Integrate;
import com.yunzhupaas.integrate.job.IntegrateJobUtil;
import com.yunzhupaas.integrate.job.QuartzUtil;
import com.yunzhupaas.integrate.model.nodeJson.IntegrateModel;
import com.yunzhupaas.util.JsonUtil;
import com.yunzhupaas.util.RedisUtil;
import com.yunzhupaas.util.StringUtil;
import org.quartz.JobDataMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Set;
@Component
public class IntegrateListener implements ApplicationRunner {
@Autowired
private RedisUtil redisUtil;
@Autowired
private RedisTemplate redisTemplate;
@Override
public void run(ApplicationArguments args) throws Exception {
Set<String> keysList = redisTemplate.keys(IntegrateJobUtil.WORKTIMEOUT_REDIS_KEY + "_key*");
for (String id : keysList) {
redisTemplate.delete(id);
}
List<String> hashValues = redisUtil.getHashValues(IntegrateJobUtil.IDGENERATOR_REDIS_KEY);
for (String value : hashValues) {
IntegrateModel integrateModel = JsonUtil.getJsonToBean(value, IntegrateModel.class);
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.putAll(JsonUtil.entityToMap(integrateModel));
Date startTime = new Date(integrateModel.getStartTime());
Date endTime = ObjectUtil.isNotEmpty(integrateModel.getEndTime()) ? new Date(integrateModel.getEndTime()) : null;
boolean isAdd = ObjectUtil.isNotEmpty(endTime) ? endTime.getTime() > System.currentTimeMillis() : true;
if (isAdd) {
QuartzUtil.addJob(integrateModel.getId(), integrateModel.getCron(), Integrate.class, jobDataMap, startTime, endTime);
}
}
}
}

View File

@@ -0,0 +1,97 @@
package com.yunzhupaas.integrate.job;
import com.yunzhupaas.base.UserInfo;
import com.yunzhupaas.config.ConfigValueUtil;
import com.yunzhupaas.database.util.TenantDataSourceUtil;
import com.yunzhupaas.exception.TenantInvalidException;
import com.yunzhupaas.integrate.entity.IntegrateEntity;
import com.yunzhupaas.integrate.entity.IntegrateQueueEntity;
import com.yunzhupaas.integrate.model.nodeJson.IntegrateModel;
import com.yunzhupaas.integrate.service.IntegrateQueueService;
import com.yunzhupaas.integrate.service.IntegrateService;
import com.yunzhupaas.util.JsonUtil;
import com.yunzhupaas.util.RandomUtil;
import com.yunzhupaas.util.RedisUtil;
import com.yunzhupaas.util.StringUtil;
import com.yunzhupaas.util.context.SpringContext;
import lombok.extern.slf4j.Slf4j;
import org.quartz.*;
import org.springframework.scheduling.quartz.QuartzJobBean;
import java.util.Date;
import java.util.Objects;
@Slf4j
@DisallowConcurrentExecution
public class Integrate extends QuartzJobBean {
private static RedisUtil redisUtil;
private static ConfigValueUtil configValueUtil;
private static IntegrateService integrateService;
private static IntegrateQueueService integrateQueueService;
static {
redisUtil = SpringContext.getBean(RedisUtil.class);
configValueUtil = SpringContext.getBean(ConfigValueUtil.class);
integrateService = SpringContext.getBean(IntegrateService.class);
integrateQueueService = SpringContext.getBean(IntegrateQueueService.class);
}
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
JobDetail jobDetail = context.getJobDetail();
String jobName = jobDetail.getKey().getName();
JobDataMap jobDataMap = jobDetail.getJobDataMap();
IntegrateModel model = IntegrateJobUtil.getModel(JsonUtil.getJsonToBean(jobDataMap, IntegrateModel.class), redisUtil);
boolean isModel = model == null;
IntegrateModel integrateModel = isModel ? JsonUtil.getJsonToBean(jobDataMap, IntegrateModel.class) : model;
if (integrateModel != null) {
UserInfo userInfo = integrateModel.getUserInfo();
if (configValueUtil.isMultiTenancy()) {
try {
TenantDataSourceUtil.switchTenant(userInfo.getTenantId());
}catch (TenantInvalidException e){
// 租户无效 禁用调度, 删除任务
log.error("Integrate, 租户无效, 删除任务:{}", userInfo.getTenantId());
IntegrateJobUtil.removeModel(integrateModel, redisUtil);
QuartzUtil.deleteJob(jobName);
return;
}
}
IntegrateEntity info = integrateService.getInfo(integrateModel.getId());
if (info != null) {
integrateModel.setTime(System.currentTimeMillis());
Integer num = integrateModel.getNum();
Integer endTimeType = integrateModel.getEndTimeType();
Integer endLimit = integrateModel.getEndLimit();
boolean isNext = Objects.equals(endTimeType, 1) ? num + 1 <= endLimit : Objects.equals(endTimeType, 2) ? integrateModel.getTime() <= integrateModel.getEndTime() : true;
integrateModel.setNum(++num);
if (isNext) {
IntegrateJobUtil.insertModel(integrateModel, redisUtil);
IntegrateQueueEntity entity = new IntegrateQueueEntity();
entity.setState(0);
entity.setId(RandomUtil.uuId());
entity.setIntegrateId(integrateModel.getId());
entity.setExecutionTime(new Date());
entity.setFullName(info.getFullName());
IntegrateModel integrate = new IntegrateModel();
integrate.setId(entity.getId());
integrate.setUserInfo(userInfo);
IntegrateJobUtil.insertIntegrate(integrate,redisUtil);
integrateQueueService.create(entity);
} else {
IntegrateJobUtil.removeModel(integrateModel, redisUtil);
QuartzUtil.deleteJob(jobName);
}
} else {
IntegrateJobUtil.removeModel(integrateModel, redisUtil);
QuartzUtil.deleteJob(jobName);
}
}
}
}

View File

@@ -0,0 +1,77 @@
package com.yunzhupaas.integrate.job;
import cn.hutool.core.util.ObjectUtil;
import com.yunzhupaas.base.UserInfo;
import com.yunzhupaas.integrate.model.nodeJson.IntegrateModel;
import com.yunzhupaas.util.JsonUtil;
import com.yunzhupaas.util.RedisUtil;
import com.yunzhupaas.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
/**
* @author 云筑产品开发平台组
* @version V3.3.0 flowable
* @copyright 深圳市乐程软件有限公司
* @date 2024/6/15 17:37
*/
@Slf4j
public class IntegrateJobUtil {
/**
* 缓存key
*/
public static final String WORKTIMEOUT_REDIS_KEY = "idgenerator_IntegrateList";
/**
* 缓存key
*/
public static final String IDGENERATOR_REDIS_KEY = "idgenerator_IntegrateModel";
/**
* 缓存key
*/
public static final String IDGENERATORID_REDIS_KEY = "idgenerator_id";
public static IntegrateModel getModel(IntegrateModel model, RedisUtil redisUtil) {
String id = model.getId();
String hashValues = redisUtil.getHashValues(IDGENERATOR_REDIS_KEY, id);
IntegrateModel integrateModel = StringUtil.isNotEmpty(hashValues) ? JsonUtil.getJsonToBean(hashValues, IntegrateModel.class) : null;
return integrateModel;
}
public static void insertModel(IntegrateModel model, RedisUtil redisUtil) {
String integrateId = model.getId();
redisUtil.insertHash(IDGENERATOR_REDIS_KEY, integrateId, JsonUtil.getObjectToString(model));
insertTenant(model, redisUtil);
}
public static void removeModel(IntegrateModel model, RedisUtil redisUtil) {
redisUtil.removeHash(IDGENERATOR_REDIS_KEY, model.getId());
}
public static void insertTenant(IntegrateModel model, RedisUtil redisUtil) {
String tenantId = StringUtil.isNotEmpty(model.getUserInfo().getTenantId()) ? model.getUserInfo().getTenantId() : "yunzhupaas";
UserInfo userInfo = model.getUserInfo();
redisUtil.insertHash(WORKTIMEOUT_REDIS_KEY, tenantId, JsonUtil.getObjectToString(userInfo));
}
public static void removeTenant(String tenantId, RedisUtil redisUtil) {
tenantId = StringUtil.isNotEmpty(tenantId) ? tenantId : "com.yunzhupaas";
redisUtil.removeHash(WORKTIMEOUT_REDIS_KEY, tenantId);
}
public static boolean getIntegrate(IntegrateModel model, RedisUtil redisUtil){
String value = redisUtil.getHashValues(IDGENERATORID_REDIS_KEY, model.getId());
return ObjectUtil.isNotEmpty(value);
}
public static void insertIntegrate(IntegrateModel model, RedisUtil redisUtil){
redisUtil.insertHash(IDGENERATORID_REDIS_KEY, model.getId(), model.getId());
}
public static void removeIntegrate(IntegrateModel model, RedisUtil redisUtil){
redisUtil.removeHash(IDGENERATORID_REDIS_KEY, model.getId());
}
}

View File

@@ -0,0 +1,118 @@
package com.yunzhupaas.integrate.job;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.Method;
import com.yunzhupaas.base.UserInfo;
import com.yunzhupaas.config.ConfigValueUtil;
import com.yunzhupaas.database.util.TenantDataSourceUtil;
import com.yunzhupaas.exception.TenantInvalidException;
import com.yunzhupaas.integrate.entity.IntegrateQueueEntity;
import com.yunzhupaas.integrate.model.nodeJson.IntegrateModel;
import com.yunzhupaas.integrate.service.IntegrateQueueService;
import com.yunzhupaas.integrate.util.IntegrateHttpModel;
import com.yunzhupaas.util.*;
import lombok.extern.slf4j.Slf4j;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.scheduling.quartz.QuartzJobBean;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@Slf4j
@DisallowConcurrentExecution
public class IntegrateQueryJobUtil extends QuartzJobBean {
@Autowired
private RedisUtil redisUtil;
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private ConfigValueUtil configValueUtil;
@Autowired
private IntegrateQueueService integrateQueueService;
public static Map<String, ScheduledFuture> futureList = new HashMap<>();
private static ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = null;
IntegrateQueryJobUtil(ThreadPoolTaskExecutor threadPoolTaskExecutor) {
if(scheduledThreadPoolExecutor == null) {
scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(20, threadPoolTaskExecutor.getThreadPoolExecutor().getThreadFactory());
}
}
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
List<String> hashValues = redisUtil.getHashValues(IntegrateJobUtil.WORKTIMEOUT_REDIS_KEY);
for (String id : hashValues) {
UserInfo userInfo = JsonUtil.getJsonToBean(id, UserInfo.class);
String tenantId = StringUtil.isNotEmpty(userInfo.getTenantId()) ? userInfo.getTenantId() : "yunzhupaas";
boolean useSuccess = redisTemplate.opsForValue().setIfAbsent(IntegrateJobUtil.WORKTIMEOUT_REDIS_KEY + "_key:" + tenantId, System.currentTimeMillis(), 3600, TimeUnit.SECONDS);
if (!useSuccess) continue;
if (futureList.get(tenantId) == null) {
ScheduledFuture scheduledFuture = scheduledThreadPoolExecutor.scheduleAtFixedRate(new Task(userInfo), 0, 1, TimeUnit.SECONDS);
futureList.put(tenantId, scheduledFuture);
}
}
}
class Task implements Runnable {
private UserInfo userInfo;
public Task(UserInfo userInfo) {
this.userInfo = userInfo;
}
@Override
public void run() {
String tenantId = StringUtil.isNotEmpty(userInfo.getTenantId()) ? userInfo.getTenantId() : "yunzhupaas";
if (configValueUtil.isMultiTenancy()) {
try {
TenantDataSourceUtil.switchTenant(userInfo.getTenantId());
}catch (TenantInvalidException e){
// 租户无效 删除缓存, 删除任务
log.error("Task, 租户无效, 删除任务:{}", userInfo.getTenantId());
IntegrateJobUtil.removeTenant(userInfo.getTenantId(), redisUtil);
ScheduledFuture scheduledFuture = futureList.get(userInfo.getTenantId());
if(scheduledFuture != null) {
scheduledFuture.cancel(true);
}
}
}
List<IntegrateQueueEntity> list = integrateQueueService.getList();
if (list.size() > 0) {
String token = AuthUtil.loginTempUser(userInfo.getUserId(), userInfo.getTenantId(), true);
String url = configValueUtil.getApiDomain() + "/api/visualdev/Integrate/executeQuery";
for (IntegrateQueueEntity entity : list) {
IntegrateModel model = new IntegrateModel();
model.setUserInfo(userInfo);
model.setId(entity.getId());
boolean integrate = IntegrateJobUtil.getIntegrate(model, redisUtil);
boolean useSuccess = redisTemplate.opsForValue().setIfAbsent(IntegrateJobUtil.WORKTIMEOUT_REDIS_KEY + "_key:" + entity.getId(), System.currentTimeMillis(), 3600, TimeUnit.SECONDS);
if (integrate && useSuccess) {
System.out.println("执行一组调度开始----------------------------");
IntegrateHttpModel httpModel = new IntegrateHttpModel();
httpModel.setUserInfo(UserProvider.getUser(token));
httpModel.setId(entity.getId());
HttpRequest request = HttpRequest.of(url).method(Method.POST).body(JsonUtil.getObjectToString(httpModel));
request.header(Constants.AUTHORIZATION, token);
request.execute().body();
System.out.println("执行一组调度结束----------------------------");
}
}
}
//删除
redisTemplate.delete(IntegrateJobUtil.WORKTIMEOUT_REDIS_KEY + "_key:" + tenantId);
}
}
}

View File

@@ -0,0 +1,75 @@
package com.yunzhupaas.integrate.job;
import lombok.extern.slf4j.Slf4j;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.util.Date;
@Slf4j
public class QuartzUtil {
private static final SchedulerFactory schedulerFactory = new StdSchedulerFactory();
public static void addJob(String jobName, String cron, Class<? extends Job> jobClass, JobDataMap jobDataMap, Date startDate, Date endDate) {
if (jobDataMap == null) {
jobDataMap = new JobDataMap();
}
JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobName).setJobData(jobDataMap).build();
Trigger trigger = TriggerBuilder.newTrigger()
.forJob(jobDetail)
.withIdentity(jobName)
.withSchedule(CronScheduleBuilder.cronSchedule(cron))
.startAt(startDate == null ? new Date() : startDate)
.endAt(endDate != null ? endDate : null)
.build();
try {
//获取实例化的 Scheduler。
Scheduler scheduler = getScheduler();
//将任务及其触发器放入调度器
scheduler.scheduleJob(jobDetail, trigger);
//调度器开始调度任务
if (!scheduler.isShutdown()) {
scheduler.start();
}
} catch (SchedulerException e) {
log.error("新增调度失败:"+e.getMessage());
}
}
private static Scheduler getScheduler() {
try {
return schedulerFactory.getScheduler();
} catch (SchedulerException e) {
e.getMessage();
}
return null;
}
public static void deleteJob(String jobName) {
try {
TriggerKey triggerKey = TriggerKey.triggerKey(jobName);
Scheduler scheduler = getScheduler();
scheduler.pauseTrigger(triggerKey);
scheduler.unscheduleJob(triggerKey);
scheduler.deleteJob(JobKey.jobKey(jobName));
} catch (SchedulerException e) {
log.error("删除调度失败:"+e.getMessage());
}
}
private static boolean isTriKey(String jobName) {
boolean flag = false;
try {
Scheduler sched = schedulerFactory.getScheduler();
TriggerKey triggerKey = TriggerKey.triggerKey(jobName);
CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);
flag = trigger != null;
} catch (Exception e) {
e.getMessage();
}
return flag;
}
}

View File

@@ -0,0 +1,9 @@
package com.yunzhupaas.integrate.mapper;
import com.yunzhupaas.base.mapper.SuperMapper;
import com.yunzhupaas.integrate.entity.IntegrateEntity;
public interface IntegrateMapper extends SuperMapper<IntegrateEntity> {
}

View File

@@ -0,0 +1,10 @@
package com.yunzhupaas.integrate.mapper;
import com.yunzhupaas.base.mapper.SuperMapper;
import com.yunzhupaas.integrate.entity.IntegrateNodeEntity;
public interface IntegrateNodeMapper extends SuperMapper<IntegrateNodeEntity> {
}

View File

@@ -0,0 +1,10 @@
package com.yunzhupaas.integrate.mapper;
import com.yunzhupaas.base.mapper.SuperMapper;
import com.yunzhupaas.integrate.entity.IntegrateEntity;
import com.yunzhupaas.integrate.entity.IntegrateQueueEntity;
public interface IntegrateQueueMapper extends SuperMapper<IntegrateQueueEntity> {
}

View File

@@ -0,0 +1,9 @@
package com.yunzhupaas.integrate.mapper;
import com.yunzhupaas.base.mapper.SuperMapper;
import com.yunzhupaas.integrate.entity.IntegrateTaskEntity;
public interface IntegrateTaskMapper extends SuperMapper<IntegrateTaskEntity> {
}

View File

@@ -0,0 +1,26 @@
package com.yunzhupaas.integrate.service;
import com.yunzhupaas.base.service.SuperService;
import com.yunzhupaas.integrate.entity.IntegrateNodeEntity;
import java.util.List;
public interface IntegrateNodeService extends SuperService<IntegrateNodeEntity> {
List<IntegrateNodeEntity> getList(List<String> id,String nodeCode);
List<IntegrateNodeEntity> getList(List<String> id,String nodeCode, Integer isRetry);
IntegrateNodeEntity getInfo(String id);
void create(IntegrateNodeEntity entity);
void update(String id,String nodeCode);
Boolean update(String id, IntegrateNodeEntity entity);
void delete(IntegrateNodeEntity entity);
void delete(String id);
}

View File

@@ -0,0 +1,21 @@
package com.yunzhupaas.integrate.service;
import com.yunzhupaas.base.service.SuperService;
import com.yunzhupaas.integrate.entity.IntegrateQueueEntity;
import java.util.List;
public interface IntegrateQueueService extends SuperService<IntegrateQueueEntity> {
List<IntegrateQueueEntity> getList();
void create(IntegrateQueueEntity entity);
Boolean update(String id, IntegrateQueueEntity entity);
void delete(IntegrateQueueEntity entity);
void delete(String integrateId);
}

View File

@@ -0,0 +1,32 @@
package com.yunzhupaas.integrate.service;
import com.yunzhupaas.base.ActionResult;
import com.yunzhupaas.base.service.SuperService;
import com.yunzhupaas.exception.WorkFlowException;
import com.yunzhupaas.integrate.entity.IntegrateEntity;
import com.yunzhupaas.integrate.model.integrate.IntegratePagination;
import java.util.List;
public interface IntegrateService extends SuperService<IntegrateEntity> {
List<IntegrateEntity> getList(IntegratePagination pagination);
List<IntegrateEntity> getList(IntegratePagination pagination, boolean isPage);
IntegrateEntity getInfo(String id);
Boolean isExistByFullName(String fullName, String id);
Boolean isExistByEnCode(String encode, String id);
void create(IntegrateEntity entity);
ActionResult ImportData(IntegrateEntity entity, Integer type) throws WorkFlowException;
Boolean update(String id, IntegrateEntity entity,boolean state);
void delete(IntegrateEntity entity);
}

View File

@@ -0,0 +1,23 @@
package com.yunzhupaas.integrate.service;
import com.yunzhupaas.base.service.SuperService;
import com.yunzhupaas.integrate.entity.IntegrateTaskEntity;
import com.yunzhupaas.integrate.model.integrate.IntegratePageModel;
import java.util.List;
public interface IntegrateTaskService extends SuperService<IntegrateTaskEntity> {
List<IntegrateTaskEntity> getList(IntegratePageModel pagination);
List<IntegrateTaskEntity> getList(List<String> id);
IntegrateTaskEntity getInfo(String id);
void create(IntegrateTaskEntity entity);
Boolean update(String id, IntegrateTaskEntity entity);
void delete(String id) ;
}

View File

@@ -0,0 +1,100 @@
package com.yunzhupaas.integrate.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.yunzhupaas.base.service.SuperServiceImpl;
import com.yunzhupaas.integrate.entity.IntegrateNodeEntity;
import com.yunzhupaas.integrate.mapper.IntegrateNodeMapper;
import com.yunzhupaas.integrate.service.IntegrateNodeService;
import com.yunzhupaas.util.RandomUtil;
import com.yunzhupaas.util.StringUtil;
import com.yunzhupaas.util.UserProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Service
public class IntegrateNodeServiceImpl extends SuperServiceImpl<IntegrateNodeMapper, IntegrateNodeEntity> implements IntegrateNodeService {
@Override
public List<IntegrateNodeEntity> getList(List<String> id, String nodeCode) {
return getList(id,nodeCode,null);
}
@Override
public List<IntegrateNodeEntity> getList(List<String> id, String nodeCode, Integer resultType) {
List<IntegrateNodeEntity> list = new ArrayList<>();
QueryWrapper<IntegrateNodeEntity> queryWrapper = new QueryWrapper<>();
if (id.size() > 0) {
queryWrapper.lambda().in(IntegrateNodeEntity::getTaskId, id);
if (StringUtil.isNotEmpty(nodeCode)) {
queryWrapper.lambda().eq(IntegrateNodeEntity::getNodeCode, nodeCode);
}
if(ObjectUtil.isNotEmpty(resultType)){
queryWrapper.lambda().eq(IntegrateNodeEntity::getResultType, resultType);
}
queryWrapper.lambda().orderByAsc(IntegrateNodeEntity::getSortCode);
queryWrapper.lambda().orderByAsc(IntegrateNodeEntity::getStartTime);
list.addAll(this.list(queryWrapper));
}
return list;
}
@Override
public IntegrateNodeEntity getInfo(String id) {
QueryWrapper<IntegrateNodeEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(IntegrateNodeEntity::getId, id);
return this.getOne(queryWrapper);
}
@Override
public void create(IntegrateNodeEntity entity) {
if (StringUtil.isEmpty(entity.getId())) {
entity.setId(RandomUtil.uuId());
}
entity.setIsRetry(1);
entity.setCreatorTime(new Date());
entity.setCreatorUserId(UserProvider.getUser().getUserId());
entity.setEnabledMark(1);
this.save(entity);
}
@Override
public void update(String taskId, String nodeCode) {
UpdateWrapper<IntegrateNodeEntity> queryWrapper = new UpdateWrapper<>();
queryWrapper.lambda().eq(IntegrateNodeEntity::getTaskId,taskId);
queryWrapper.lambda().eq(IntegrateNodeEntity::getNodeCode,nodeCode);
queryWrapper.lambda().set(IntegrateNodeEntity::getIsRetry,0);
this.update(queryWrapper);
}
@Override
public Boolean update(String id, IntegrateNodeEntity entity) {
entity.setId(id);
entity.setLastModifyTime(new Date());
entity.setLastModifyUserId(UserProvider.getUser().getUserId());
return this.updateById(entity);
}
@Override
public void delete(IntegrateNodeEntity entity) {
if(entity!=null) {
this.removeById(entity.getId());
}
}
@Override
public void delete(String taskId) {
QueryWrapper<IntegrateNodeEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(IntegrateNodeEntity::getTaskId,taskId);
this.remove(queryWrapper);
}
}

View File

@@ -0,0 +1,56 @@
package com.yunzhupaas.integrate.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yunzhupaas.base.service.SuperServiceImpl;
import com.yunzhupaas.integrate.entity.IntegrateQueueEntity;
import com.yunzhupaas.integrate.mapper.IntegrateQueueMapper;
import com.yunzhupaas.integrate.service.IntegrateQueueService;
import com.yunzhupaas.util.RandomUtil;
import com.yunzhupaas.util.StringUtil;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
@Service
public class IntegrateQueueServiceImpl extends SuperServiceImpl<IntegrateQueueMapper, IntegrateQueueEntity> implements IntegrateQueueService {
@Override
public List<IntegrateQueueEntity> getList() {
QueryWrapper<IntegrateQueueEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().orderByAsc(IntegrateQueueEntity::getCreatorTime);
return this.list(queryWrapper);
}
@Override
public void create(IntegrateQueueEntity entity) {
if(StringUtil.isEmpty(entity.getId())){
entity.setId(RandomUtil.uuId());
}
entity.setCreatorTime(new Date());
this.save(entity);
}
@Override
public Boolean update(String id, IntegrateQueueEntity entity) {
entity.setId(id);
entity.setLastModifyTime(new Date());
return this.updateById(entity);
}
@Override
public void delete(IntegrateQueueEntity entity) {
if(entity!=null){
this.removeById(entity.getId());
}
}
@Override
public void delete(String integrateId) {
QueryWrapper<IntegrateQueueEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(IntegrateQueueEntity::getIntegrateId,integrateId);
this.remove(queryWrapper);
}
}

View File

@@ -0,0 +1,235 @@
package com.yunzhupaas.integrate.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yunzhupaas.base.ActionResult;
import com.yunzhupaas.base.service.SuperServiceImpl;
import com.yunzhupaas.constant.MsgCode;
import com.yunzhupaas.exception.WorkFlowException;
import com.yunzhupaas.integrate.entity.IntegrateEntity;
import com.yunzhupaas.integrate.job.Integrate;
import com.yunzhupaas.integrate.job.IntegrateJobUtil;
import com.yunzhupaas.integrate.job.QuartzUtil;
import com.yunzhupaas.integrate.mapper.IntegrateMapper;
import com.yunzhupaas.integrate.model.childnode.IntegrateChildNode;
import com.yunzhupaas.integrate.model.childnode.IntegrateProperties;
import com.yunzhupaas.integrate.model.integrate.IntegratePagination;
import com.yunzhupaas.integrate.model.nodeJson.IntegrateModel;
import com.yunzhupaas.integrate.service.IntegrateQueueService;
import com.yunzhupaas.integrate.service.IntegrateService;
import com.yunzhupaas.util.*;
import org.apache.commons.lang3.StringUtils;
import org.quartz.JobDataMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
@Service
public class IntegrateServiceImpl extends SuperServiceImpl<IntegrateMapper, IntegrateEntity> implements IntegrateService {
@Autowired
private RedisUtil redisUtil;
@Autowired
private IntegrateQueueService integrateQueueService;
@Override
public List<IntegrateEntity> getList(IntegratePagination pagination) {
return getList(pagination, true);
}
@Override
public List<IntegrateEntity> getList(IntegratePagination pagination, boolean isPage) {
QueryWrapper<IntegrateEntity> queryWrapper = new QueryWrapper<>();
if (StringUtil.isNotEmpty(pagination.getKeyword())) {
queryWrapper.lambda().and(
t -> t.like(IntegrateEntity::getFullName, pagination.getKeyword())
.or().like(IntegrateEntity::getEnCode, pagination.getKeyword())
);
}
if (ObjectUtil.isNotEmpty(pagination.getType())) {
queryWrapper.lambda().eq(IntegrateEntity::getType, pagination.getType());
}
if (ObjectUtil.isNotEmpty(pagination.getFormId())) {
queryWrapper.lambda().eq(IntegrateEntity::getFormId, pagination.getFormId());
}
if (ObjectUtil.isNotEmpty(pagination.getTrigger())) {
queryWrapper.lambda().eq(IntegrateEntity::getTriggerType, pagination.getTrigger());
}
if (ObjectUtil.isNotEmpty(pagination.getEnabledMark())) {
queryWrapper.lambda().eq(IntegrateEntity::getEnabledMark, pagination.getEnabledMark());
}
//排序
if (StringUtils.isEmpty(pagination.getSidx())) {
queryWrapper.lambda().orderByDesc(IntegrateEntity::getCreatorTime);
} else {
queryWrapper = "asc".equals(pagination.getSort().toLowerCase()) ? queryWrapper.orderByAsc(pagination.getSidx()) : queryWrapper.orderByDesc(pagination.getSidx());
}
if (isPage) {
Page<IntegrateEntity> page = new Page<>(pagination.getCurrentPage(), pagination.getPageSize());
IPage<IntegrateEntity> userPage = page(page, queryWrapper);
return pagination.setData(userPage.getRecords(), page.getTotal());
}
return this.list(queryWrapper);
}
@Override
public IntegrateEntity getInfo(String id) {
QueryWrapper<IntegrateEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(IntegrateEntity::getId, id);
return this.getOne(queryWrapper);
}
@Override
public Boolean isExistByFullName(String fullName, String id) {
QueryWrapper<IntegrateEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(IntegrateEntity::getFullName, fullName);
if (!StringUtil.isEmpty(id)) {
queryWrapper.lambda().ne(IntegrateEntity::getId, id);
}
return this.count(queryWrapper) > 0;
}
@Override
public Boolean isExistByEnCode(String encode, String id) {
QueryWrapper<IntegrateEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(IntegrateEntity::getEnCode, encode);
if (!StringUtil.isEmpty(id)) {
queryWrapper.lambda().ne(IntegrateEntity::getId, id);
}
return this.count(queryWrapper) > 0;
}
@Override
public void create(IntegrateEntity entity) {
if (StringUtil.isEmpty(entity.getId())) {
entity.setId(RandomUtil.uuId());
}
entity.setCreatorTime(new Date());
entity.setCreatorUserId(UserProvider.getUser().getUserId());
formId(entity);
this.save(entity);
}
@Override
@DSTransactional
public ActionResult ImportData(IntegrateEntity entity, Integer type) throws WorkFlowException {
if (entity != null) {
StringJoiner errList = new StringJoiner("");
String copyNum = UUID.randomUUID().toString().substring(0, 5);
if (this.getInfo(entity.getId()) != null) {
if (Objects.equals(type, 0)) {
errList.add("ID");
} else {
entity.setId(RandomUtil.uuId());
}
}
if (this.isExistByEnCode(entity.getEnCode(),null) ) {
if (Objects.equals(type, 0)) {
errList.add(MsgCode.IMP009.get());
} else {
entity.setEnCode(entity.getEnCode() + copyNum);
}
}
if (this.isExistByFullName(entity.getFullName(), null) ) {
if (Objects.equals(type, 0)) {
errList.add(MsgCode.IMP008.get());
} else {
entity.setFullName(entity.getFullName() + ".副本" + copyNum);
}
}
if (Objects.equals(type, 0) && errList.length() > 0) {
return ActionResult.fail(errList + MsgCode.IMP007.get());
}
try {
this.setIgnoreLogicDelete().removeById(entity.getId());
entity.setCreatorTime(new Date());
entity.setCreatorUserId(UserProvider.getLoginUserId());
entity.setLastModifyTime(null);
entity.setLastModifyUserId(null);
entity.setEnabledMark(0);
this.setIgnoreLogicDelete().saveOrUpdate(entity);
this.clearIgnoreLogicDelete();
} catch (Exception e) {
throw new WorkFlowException(MsgCode.IMP003.get(),e);
}
return ActionResult.success(MsgCode.IMP001.get());
}
return ActionResult.fail(MsgCode.IMP006.get());
}
@Override
public Boolean update(String id, IntegrateEntity entity, boolean state) {
entity.setId(id);
IntegrateEntity info = getInfo(id);
if (Objects.equals(entity.getEnabledMark(), 0) || !Objects.equals(info.getTemplateJson(), entity.getTemplateJson())) {
deleteJob(entity);
}
if (ObjectUtil.isEmpty(entity.getEnabledMark())) {
entity.setEnabledMark(info.getEnabledMark());
}
if (ObjectUtil.isEmpty(entity.getType())) {
entity.setType(info.getType());
}
if ((!Objects.equals(info.getTemplateJson(), entity.getTemplateJson()) || state) && Objects.equals(entity.getEnabledMark(), 1)) {
formId(entity);
}
entity.setLastModifyTime(new Date());
entity.setLastModifyUserId(UserProvider.getUser().getUserId());
return this.updateById(entity);
}
@Override
public void delete(IntegrateEntity entity) {
deleteJob(entity);
this.removeById(entity.getId());
}
private void formId(IntegrateEntity entity) {
Integer enabledMark = entity.getEnabledMark();
String templateJson = entity.getTemplateJson();
if (StringUtil.isNotEmpty(templateJson)) {
IntegrateChildNode childNode = JsonUtil.getJsonToBean(templateJson, IntegrateChildNode.class);
IntegrateProperties properties = childNode.getProperties();
String formId = properties.getFormId();
entity.setFormId(formId);
entity.setTriggerType(properties.getTriggerEvent());
if (Objects.equals(enabledMark, 1)) {
if (Objects.equals(entity.getType(), 2)) {
IntegrateModel model = new IntegrateModel();
model.setId(entity.getId());
IntegrateJobUtil.removeModel(model, redisUtil);
IntegrateModel integrateModel = JsonUtil.getJsonToBean(properties, IntegrateModel.class);
integrateModel.setUserInfo(UserProvider.getUser());
integrateModel.setId(entity.getId());
integrateModel.setState(0);
JobDataMap jobDataMap = new JobDataMap();
Date startTime = ObjectUtil.isNotEmpty(properties.getStartTime()) ? new Date(properties.getStartTime()) : new Date();
Date endTime = Objects.equals(properties.getEndTimeType(), 2) ? new Date(properties.getEndTime()) : null;
integrateModel.setEndTime(endTime != null ? endTime.getTime() : null);
integrateModel.setStartTime(startTime.getTime());
jobDataMap.putAll(JsonUtil.entityToMap(integrateModel));
redisUtil.removeHash(IntegrateJobUtil.IDGENERATOR_REDIS_KEY, entity.getId());
boolean isAdd = ObjectUtil.isNotEmpty(endTime) ? endTime.getTime() > System.currentTimeMillis() : true;
if (isAdd) {
QuartzUtil.addJob(entity.getId(), properties.getCron(), Integrate.class, jobDataMap, startTime, endTime);
}
}
}
}
}
private void deleteJob(IntegrateEntity entity) {
QuartzUtil.deleteJob(entity.getId());
integrateQueueService.delete(entity.getId());
IntegrateModel model = new IntegrateModel();
model.setId(entity.getId());
IntegrateJobUtil.removeModel(model, redisUtil);
}
}

View File

@@ -0,0 +1,98 @@
package com.yunzhupaas.integrate.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yunzhupaas.base.service.SuperServiceImpl;
import com.yunzhupaas.integrate.entity.IntegrateTaskEntity;
import com.yunzhupaas.integrate.mapper.IntegrateTaskMapper;
import com.yunzhupaas.integrate.model.integrate.IntegratePageModel;
import com.yunzhupaas.integrate.service.IntegrateNodeService;
import com.yunzhupaas.integrate.service.IntegrateTaskService;
import com.yunzhupaas.util.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Service
public class IntegrateTaskServiceImpl extends SuperServiceImpl<IntegrateTaskMapper, IntegrateTaskEntity> implements IntegrateTaskService {
@Autowired
private IntegrateNodeService integrateNodeService;
@Override
public List<IntegrateTaskEntity> getList(IntegratePageModel pagination) {
QueryWrapper<IntegrateTaskEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(IntegrateTaskEntity::getIntegrateId,pagination.getIntegrateId());
//日期范围近7天、近1月、近3月、自定义
String startTime = pagination.getStartTime() != null ? pagination.getStartTime() : null;
String endTime = pagination.getEndTime() != null ? pagination.getEndTime() : null;
if (!StringUtils.isEmpty(startTime) && !StringUtils.isEmpty(endTime)) {
Date startTimes = new Date(Long.parseLong(startTime));
Date endTimes = new Date(Long.parseLong(endTime));
queryWrapper.lambda().ge(IntegrateTaskEntity::getExecutionTime, startTimes).le(IntegrateTaskEntity::getExecutionTime, endTimes);
}
if (ObjectUtil.isNotEmpty(pagination.getResultType())) {
queryWrapper.lambda().eq(IntegrateTaskEntity::getResultType, pagination.getResultType());
}
queryWrapper.lambda().orderByDesc(IntegrateTaskEntity::getExecutionTime);
Page<IntegrateTaskEntity> page = new Page<>(pagination.getCurrentPage(), pagination.getPageSize());
IPage<IntegrateTaskEntity> userPage = page(page, queryWrapper);
return pagination.setData(userPage.getRecords(), page.getTotal());
}
@Override
public List<IntegrateTaskEntity> getList(List<String> id) {
List<IntegrateTaskEntity> list = new ArrayList<>();
QueryWrapper<IntegrateTaskEntity> queryWrapper = new QueryWrapper<>();
if (id.size() > 0) {
queryWrapper.lambda().in(IntegrateTaskEntity::getIntegrateId, id);
list.addAll(this.list(queryWrapper));
}
return list;
}
@Override
public IntegrateTaskEntity getInfo(String id) {
QueryWrapper<IntegrateTaskEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(IntegrateTaskEntity::getId, id);
return this.getOne(queryWrapper);
}
@Override
public void create(IntegrateTaskEntity entity) {
if (StringUtil.isEmpty(entity.getId())) {
entity.setId(RandomUtil.uuId());
}
entity.setCreatorTime(new Date());
entity.setCreatorUserId(UserProvider.getUser().getUserId());
entity.setEnabledMark(0);
this.save(entity);
}
@Override
public Boolean update(String id, IntegrateTaskEntity entity) {
entity.setId(id);
entity.setLastModifyTime(new Date());
entity.setLastModifyUserId(UserProvider.getUser().getUserId());
return this.updateById(entity);
}
@Override
public void delete(String id) {
if(StringUtils.isNotEmpty(id)) {
QueryWrapper<IntegrateTaskEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(IntegrateTaskEntity::getId, id);
this.remove(queryWrapper);
integrateNodeService.delete(id);
}
}
}

View File

@@ -0,0 +1,22 @@
package com.yunzhupaas.integrate.util;
import com.yunzhupaas.base.UserInfo;
import com.yunzhupaas.base.model.OnlineImport.VisualdevModelDataInfoVO;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @author :云筑产品开发平台组
* @version: V3.1.0
* @copyright 深圳市乐程软件有限公司
* @date 2024/7/13 上午9:44
*/
@Data
public class IntegrateHttpModel {
private String id;
public UserInfo userInfo;
private List<VisualdevModelDataInfoVO> dataInfoVOList = new ArrayList<>();
}