package jnpf.scheduletask.task; import com.xxl.job.core.context.XxlJobHelper; import com.xxl.job.core.handler.annotation.XxlJob; import jnpf.base.DataInterFaceApi; import jnpf.base.UserInfo; import jnpf.base.entity.DataInterfaceEntity; import jnpf.base.model.datainterface.DataInterfaceInvokeModel; import jnpf.database.util.TenantDataSourceUtil; import jnpf.emnus.TemplateEnum; import jnpf.exception.TenantInvalidException; import jnpf.model.visualJson.TemplateJsonModel; import jnpf.scheduletask.entity.TimeTaskEntity; import jnpf.scheduletask.model.ContentNewModel; import jnpf.scheduletask.model.UpdateTaskModel; import jnpf.scheduletask.rest.RestScheduleTaskUtil; import jnpf.util.AuthUtil; import jnpf.util.JsonUtil; import jnpf.util.StringUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.Map; import java.util.Objects; /** * Api和数据接口使用 * * @author :JNPF开发平台组 * @version: V3.1.0 * @copyright 引迈信息技术有限公司 * @date :2022/3/23 9:25 */ @Slf4j @Component public class ScheduleTaskHandler { @Autowired private DataInterFaceApi dataInterFaceApi; @XxlJob("defaultHandler") public void defaultHandler() { long time = System.currentTimeMillis(); // 获取参数 String param = XxlJobHelper.getJobParam(); // 转换成模型 TimeTaskEntity entity = JsonUtil.getJsonToBean(param, TimeTaskEntity.class); ContentNewModel model = JsonUtil.getJsonToBean(param, ContentNewModel.class); // 得到数据接口信息 String tenantId = StringUtil.isNotEmpty(model.getUserInfo().getTenantId()) ? model.getUserInfo().getTenantId() : ""; String userId = StringUtil.isNotEmpty(model.getUserInfo().getUserId()) ? model.getUserInfo().getUserId() : ""; String token = AuthUtil.loginTempUser(userId, tenantId, true); // 切换租户 UserInfo userInfo = model.getUserInfo(); // 切换数据源 if (userInfo != null && StringUtil.isNotEmpty(userInfo.getTenantId())) { try { TenantDataSourceUtil.switchTenant(userInfo.getTenantId()); }catch (TenantInvalidException e){ // 租户无效 禁用任务 log.error("ScheduleTaskHandler, 租户无效, 禁用任务:{}", userInfo.getTenantId()); entity = RestScheduleTaskUtil.getInfo(entity.getId(), model.getUserInfo()); entity.setEnabledMark(0); UpdateTaskModel updateTaskModel = new UpdateTaskModel(); updateTaskModel.setEntity(entity); updateTaskModel.setUserInfo(model.getUserInfo()); RestScheduleTaskUtil.updateTask(updateTaskModel); } } DataInterfaceEntity dataInterfaceEntity = dataInterFaceApi.getDataInterfaceInfo(model.getInterfaceId(), tenantId); // 如果是http if (entity != null && "3".equals(String.valueOf(dataInterfaceEntity.getType()))) { dataInterfaceEntity.setTenantId(tenantId); boolean callHttp = callHttp(model, dataInterfaceEntity, token); } else if (entity != null && "1".equals(String.valueOf(dataInterfaceEntity.getType()))) { dataInterfaceEntity.setTenantId(tenantId); boolean callSql = callSql(model, dataInterfaceEntity, token); } } // ---------------START callSQL /** * 调用SQL * * @param model 系统调度参数 */ private boolean callSql(ContentNewModel model, DataInterfaceEntity entity, String token) { try { if (entity != null) { Map map = null; if (model.getParameter() != null && model.getParameter().size() > 0) { map = new HashMap<>(16); for (TemplateJsonModel parameterModel : model.getParameter()) { String value = Objects.equals(parameterModel.getSourceType(), TemplateEnum.Empty.getCode()) ? "" : parameterModel.getRelationField(); map.put(parameterModel.getField(), value); } } dataInterFaceApi.invokeById(new DataInterfaceInvokeModel(entity.getId(), entity.getTenantId(), map, token)); } } catch (Exception e) { e.printStackTrace(); } return false; } // ---------------START callHttp /** * HTTP调用 * * @param model 系统调度参数 * @return */ private Boolean callHttp(ContentNewModel model, DataInterfaceEntity entity, String token) { try { if (entity != null) { Map map = null; if (model.getParameter() != null && model.getParameter().size() > 0) { map = new HashMap<>(16); for (TemplateJsonModel parameterModel : model.getParameter()) { String value = Objects.equals(parameterModel.getSourceType(), TemplateEnum.Empty.getCode()) ? "" : parameterModel.getRelationField(); map.put(parameterModel.getField(), value); } } dataInterFaceApi.invokeById(new DataInterfaceInvokeModel(entity.getId(), entity.getTenantId(), map, token)); } } catch (Exception e) { e.printStackTrace(); } return false; } }