feat(dms): 添加租户ID和用户ID参数

- 润滑工单dms_bills_lube_instance表新增租户id字段,相应实体类字段更新
- DmsPlanInspectService、DmsPlanLubeService 和 DmsPlanMaintService 中添加租户ID和用户ID传给定时任务job
- 更新 RemoteInspectInstanceService、RemoteLubeInstanceService 和 RemoteMaintInstanceService 接口,增加租户ID和用户ID参数
- 在 RemoteInspectInstanceServiceImpl、RemoteLubeInstanceServiceImpl 和 RemoteMaintInstanceServiceImpl 中实现新增参数的传递
- 更新 RemoteJobServiceImpl,将租户ID和用户ID作为任务参数添加到集群任务中
master
zch 1 month ago
parent a0a25ec1f9
commit 489bf79700

@ -4,6 +4,6 @@ import org.dromara.common.core.domain.R;
public interface RemoteInspectInstanceService {
public R<Integer> insertInspectInstance(String planInspectCode);
public R<Integer> insertInspectInstance(String planInspectCode, String tenantId, Long userId);
}

@ -6,7 +6,7 @@ import org.dromara.common.core.domain.R;
public interface RemoteLubeInstanceService {
public R<Void> insertLubeInstance(String lubeInstanceCode);
public R<Void> insertLubeInstance(String lubeInstanceCode, String tenantId, Long userId);

@ -4,5 +4,5 @@ import org.dromara.common.core.domain.R;
public interface RemoteMaintInstanceService {
public R<Integer> insertDmsBillsMaintInstance(String planMaintCode);
public R<Integer> insertDmsBillsMaintInstance(String planMaintCode, String tenantId, Long userId);
}

@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.tenant.core.TenantEntity;
import org.dromara.dms.domain.vo.DmsBillsLubeDetailVo;
import java.io.Serial;
@ -22,7 +23,7 @@ import java.util.List;
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("dms_bills_lube_instance")
public class DmsBillsLubeInstance extends BaseEntity {
public class DmsBillsLubeInstance extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;

@ -38,7 +38,7 @@ public class RemoteInspectInstanceServiceImpl implements RemoteInspectInstanceSe
@Override
@Transactional( rollbackFor = Exception.class )
public R<Integer> insertInspectInstance(String planInspectCode){
public R<Integer> insertInspectInstance(String planInspectCode, String tenantId, Long userId){
// 使用 replaceAll 方法将双引号替换为空字符串
@ -71,8 +71,6 @@ public class RemoteInspectInstanceServiceImpl implements RemoteInspectInstanceSe
// dmsBillsInspectInstance.setPerformer(dmsPlanInspect.getPerformer());//执行人
//写死105也可根据传入对象的wfprocessid作为传参。
/*
Long aLong = dmsRepairInstanceMapper.selectWfProcessActivityId(105l);
@ -85,6 +83,10 @@ public class RemoteInspectInstanceServiceImpl implements RemoteInspectInstanceSe
// dmsBillsInspectInstance.setIsFlag("1");
dmsBillsInspectInstance.setInspectStatus(DmsConstants.DMS_BILLS_INSPECT_INSTANCE_INSPECT_STATUS_TO_INSPECT);//待巡检
dmsBillsInspectInstance.setCreateBy(userId);
// dmsBillsInspectInstance.setCreateTime(new Date());
dmsBillsInspectInstance.setTenantId(tenantId);
int i = dmsBillsInspectInstanceMapper.insert(dmsBillsInspectInstance);
// List<DmsBillsInspectInstance> dmsBillsInspectInstances = dmsBillsInspectInstanceMapper.selectDmsBillsInspectInstanceList(dmsBillsInspectInstance);
@ -118,6 +120,10 @@ public class RemoteInspectInstanceServiceImpl implements RemoteInspectInstanceSe
dmsInspectInstanceDetail.setInspectStatus("0");//TODO:为什么设置为异常?
// dmsInspectInstanceDetailMapper.insertDmsInspectInstanceDetail(dmsInspectInstanceDetail);
dmsInspectInstanceDetail.setTenantId(tenantId);
dmsInspectInstanceDetail.setCreateBy(userId);
// dmsInspectInstanceDetail.setCreateTime(new Date());
dmsInspectInstanceDetailMapper.insert(dmsInspectInstanceDetail);
Long projectId = dmsInspectInstanceDetailMapper.selectProjectId(dmsInspectRouteDetail.getInspectStandard());
@ -138,6 +144,11 @@ public class RemoteInspectInstanceServiceImpl implements RemoteInspectInstanceSe
dmsInspectInstanceDetailProject.setInstanceDetailId(dmsInspectInstanceDetail.getInstanceDetailId());
dmsInspectInstanceDetailProject.setInspectProjectId(projectId);
// dmsInspectInstanceDetailProjectMapper.insertDmsInspectInstanceDetailProject(dmsInspectInstanceDetailProject);
dmsInspectInstanceDetailProject.setTenantId(tenantId);
dmsInspectInstanceDetailProject.setCreateBy(userId);
// dmsInspectInstanceDetailProject.setCreateTime(new Date());
dmsInspectInstanceDetailProjectMapper.insert(dmsInspectInstanceDetailProject);
// }

@ -52,7 +52,7 @@ public class RemoteLubeInstanceServiceImpl implements RemoteLubeInstanceService
@Override
@Transactional(rollbackFor = Exception.class)
public R<Void> insertLubeInstance(String planLubeCode) {
public R<Void> insertLubeInstance(String planLubeCode, String tenantId, Long userId) {
// 去除润滑计划编号中的双引号
// String lubeInstanceCodeS = planLubeCode.replaceAll("\"", "");
@ -76,32 +76,35 @@ public class RemoteLubeInstanceServiceImpl implements RemoteLubeInstanceService
}
// 创建新的润滑工单实例对象
DmsBillsLubeInstanceBo dmsBillsLubeInstanceBo = new DmsBillsLubeInstanceBo();
DmsBillsLubeInstance dmsBillsLubeInstance = new DmsBillsLubeInstance();
// 设置创建人
dmsBillsLubeInstanceBo.setCreateBy(dmsPlanLube.getCreateBy());
dmsBillsLubeInstance.setCreateBy(dmsPlanLube.getCreateBy());
// 设置润滑工单的计划ID
dmsBillsLubeInstanceBo.setPlanLubeId(dmsPlanLube.getPlanLubeId());
dmsBillsLubeInstance.setPlanLubeId(dmsPlanLube.getPlanLubeId());
// 设置计划开始时间为润滑时间
dmsBillsLubeInstanceBo.setPlanBeginTime(dmsPlanLube.getLubeTime());
dmsBillsLubeInstance.setPlanBeginTime(dmsPlanLube.getLubeTime());
// 生成并设置润滑工单编码
dmsBillsLubeInstanceBo.setBillsLubeCode(Seq.getId(Seq.dmsLubeInstanceSeqType, Seq.dmsLubeInstanceCode));
dmsBillsLubeInstance.setBillsLubeCode(Seq.getId(Seq.dmsLubeInstanceSeqType, Seq.dmsLubeInstanceCode));
// 设置润滑状态为待润滑
dmsBillsLubeInstanceBo.setLubeStatus(DmsConstants.DMS_BILLS_LUBE_INSTANCE_STATUS_TO_LUBE);
dmsBillsLubeInstance.setLubeStatus(DmsConstants.DMS_BILLS_LUBE_INSTANCE_STATUS_TO_LUBE);
// 设置润滑组
dmsBillsLubeInstanceBo.setLubeGroup(dmsPlanLube.getLubeGroup());
dmsBillsLubeInstance.setLubeGroup(dmsPlanLube.getLubeGroup());
// 设置润滑监督人
dmsBillsLubeInstanceBo.setLubeSupervisor(dmsPlanLube.getLubeSupervisor());
dmsBillsLubeInstance.setLubeSupervisor(dmsPlanLube.getLubeSupervisor());
// 设置润滑级别
dmsBillsLubeInstanceBo.setLubeLevel(dmsPlanLube.getLubeLevel());
dmsBillsLubeInstance.setLubeLevel(dmsPlanLube.getLubeLevel());
// 获取时间限制
Long timeLimit = dmsPlanLube.getTimeLimit();
// 计算并设置计划结束时间
Date planEndTime = new Date(dmsPlanLube.getLubeTime().getTime() + timeLimit * 1000L);
dmsBillsLubeInstanceBo.setPlanEndTime(planEndTime);
dmsBillsLubeInstance.setPlanEndTime(planEndTime);
dmsBillsLubeInstance.setCreateBy(userId);
// dmsBillsLubeInstance.setCreateTime(new Date());
dmsBillsLubeInstance.setTenantId(tenantId);
// 插入润滑工单实例到数据库
DmsBillsLubeInstanceVo BillsLubeInstance = dmsBillsLubeInstanceService.insertByBo(dmsBillsLubeInstanceBo);
int i = dmsBillsLubeInstanceMapper.insert(dmsBillsLubeInstance);
DmsPlanLubeBo dmsPlanLubeBo = MapstructUtils.convert(dmsPlanLube, DmsPlanLubeBo.class);
@ -110,25 +113,19 @@ public class RemoteLubeInstanceServiceImpl implements RemoteLubeInstanceService
List<DmsBillsLubeDetail> billsLubeDetails = new ArrayList<>();
for (DmsPlanLubeDetailVo planLubeDetail : lubeDetails) {
DmsBillsLubeDetail dmsBillsLubeDetail = new DmsBillsLubeDetail();
dmsBillsLubeDetail.setLubeInstanceId(dmsBillsLubeInstanceBo.getLubeInstanceId());
dmsBillsLubeDetail.setLubeInstanceId(dmsBillsLubeInstance.getLubeInstanceId());
dmsBillsLubeDetail.setMachineId(planLubeDetail.getDeviceId());
dmsBillsLubeDetail.setLubeStationId(planLubeDetail.getLubeStationId());
dmsBillsLubeDetail.setLubeStandardId(planLubeDetail.getLubeStandardId());
//dmsBillsLubeDetail.setActiveFlag("Y"); // 假设是否标记字段对应activeFlag
billsLubeDetails.add(dmsBillsLubeDetail);
dmsBillsLubeDetail.setTenantId(tenantId);
dmsBillsLubeDetail.setCreateBy(userId);
// dmsBillsLubeDetail.setCreateTime(new Date());
dmsBillsLubeDetailMapper.insert(dmsBillsLubeDetail);
}
/* // 使用mybatis-plus批量保存
return dmsBillsLubeDetailMapper.insertBatch(billsLubeDetails);*/
// 修改批量插入方式避免SQL Server批量插入时获取自动生成主键的问题
boolean result = true;
for (DmsBillsLubeDetail detail : billsLubeDetails) {
result = result && dmsBillsLubeDetailMapper.insert(detail) > 0;
if (!result) {
break;
}
}
return R.ok();
}

@ -37,12 +37,6 @@ public class RemoteMaintInstanceServiceImpl implements RemoteMaintInstanceServic
// 预定义系统用户相关常量,实际项目中建议从配置读取或定义在公共常量类中
private static final Long SYSTEM_USER_ID = 1L; // 假设的系统管理员用户ID
private static final Long SYSTEM_DEPT_ID = 103L; // 假设的系统默认部门ID
private static final String DEFAULT_TENANT_ID_FOR_JOBS = "000000"; // 定时任务使用的默认租户ID
/**
*
*
@ -51,7 +45,7 @@ public class RemoteMaintInstanceServiceImpl implements RemoteMaintInstanceServic
*/
@Override
@Transactional( rollbackFor = Exception.class )
public R<Integer> insertDmsBillsMaintInstance(String planMaintCode) {
public R<Integer> insertDmsBillsMaintInstance(String planMaintCode , String tenantId, Long userId) {
String planMaintCodeS = planMaintCode.replaceAll("\"", "");
DmsPlanMaint dmsPlanMaint = dmsPlanMaintMapper.selectDmsPlanMaintJoinByPlanMaintCode(planMaintCodeS);
List<DmsPlanMaintDetail> planMaintDetails = dmsPlanMaint.getDmsPlanMaintDetailList();
@ -76,21 +70,8 @@ public class RemoteMaintInstanceServiceImpl implements RemoteMaintInstanceServic
dmsBillsMaintInstance.setPlanEndTime(new Date(lubeTime.getTime() + timeLimit * 1000l));
//字段没有自动填充,只能代码手动填充
// 获取用户信息
/* SaSession session = StpUtil.getTokenSession();
if (ObjectUtil.isNull(session)) {
return R.fail("用户会话不存在");
}
LoginUser loginUser = (LoginUser) session.get("loginUser");*/
LoginUser loginUser = new LoginUser();//暂时默认系统用户
loginUser.setTenantId(DEFAULT_TENANT_ID_FOR_JOBS);//暂时默认系统用户
loginUser.setUserId(SYSTEM_USER_ID);//暂时默认系统用户
loginUser.setDeptId(SYSTEM_DEPT_ID);//暂时默认系统用户
dmsBillsMaintInstance.setCreateBy(SYSTEM_USER_ID);//暂时默认系统用户
dmsBillsMaintInstance.setCreateDept(SYSTEM_DEPT_ID);//暂时默认系统用户
dmsBillsMaintInstance.setTenantId(DEFAULT_TENANT_ID_FOR_JOBS);//暂时默认系统用户
dmsBillsMaintInstance.setCreateBy(userId);//暂时默认系统用户
dmsBillsMaintInstance.setTenantId(tenantId);//暂时默认系统用户
int i = dmsBillsMaintInstanceMapper.insert(dmsBillsMaintInstance);
@ -99,18 +80,15 @@ public class RemoteMaintInstanceServiceImpl implements RemoteMaintInstanceServic
// dmsMaintInstanceActivity.setProcessStepOrder(1L);
// int i1 = dmsMaintInstanceActivityMapper.insertDmsMaintInstanceActivity(dmsMaintInstanceActivity);
batchInsertDmsBillsMaintDetail(dmsPlanMaint, dmsBillsMaintInstance.getMaintInstanceId(), loginUser);
batchInsertDmsBillsMaintDetail(dmsPlanMaint, dmsBillsMaintInstance.getMaintInstanceId(), tenantId, userId);
return R.ok(i);
}
@Transactional( rollbackFor = Exception.class )
public void batchInsertDmsBillsMaintDetail(DmsPlanMaint dmsPlanMaint, Long maintInstanceId, LoginUser loginUser) {
public void batchInsertDmsBillsMaintDetail(DmsPlanMaint dmsPlanMaint, Long maintInstanceId, String tenantId, Long userId) {
Long userId = loginUser.getUserId();
Long deptId = loginUser.getDeptId();
String tenantId = loginUser.getTenantId();
List<DmsPlanMaintDetail> planMaintDetails = dmsPlanMaint.getDmsPlanMaintDetailList();
List<DmsBillsMaintDetail> billsMaintDetails = new ArrayList<>();
@ -125,7 +103,6 @@ public class RemoteMaintInstanceServiceImpl implements RemoteMaintInstanceServic
//字段没有自动填充,只能代码手动填充
dmsBillsMaintDetail.setCreateBy(userId);
dmsBillsMaintDetail.setCreateDept(deptId);
dmsBillsMaintDetail.setTenantId(tenantId);
dmsBillsMaintDetailMapper.insert(dmsBillsMaintDetail);
@ -147,7 +124,6 @@ public class RemoteMaintInstanceServiceImpl implements RemoteMaintInstanceServic
//字段没有自动填充,只能代码手动填充
billsMaintDetailProject.setCreateBy(userId);
billsMaintDetailProject.setCreateDept(deptId);
billsMaintDetailProject.setTenantId(tenantId);
dmsBillsMaintDetailProjectMapper.insert(billsMaintDetailProject);

@ -15,10 +15,12 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.uuid.Seq;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.dms.domain.DmsBaseInspectRoute;
import org.dromara.dms.domain.DmsPlanInspect;
import org.dromara.dms.domain.bo.DmsPlanInspectBo;
import org.dromara.dms.domain.vo.DmsPlanInspectVo;
import org.dromara.dms.domain.vo.DmsPlanMaintVo;
import org.dromara.dms.mapper.DmsBaseInspectRouteMapper;
import org.dromara.dms.mapper.DmsPlanInspectMapper;
import org.dromara.dms.service.IDmsPlanInspectService;
@ -204,17 +206,17 @@ public class DmsPlanInspectServiceImpl implements IDmsPlanInspectService {
.setTriggerInterval(bo.getCronExpression())//间隔时长: cron表达式
.setRetryInterval(3)//重试间隔时长
.setArgsStr("planInspectCode")
.setExtAttrs(planInspectCode);
.setExtAttrs(planInspectCode)
.setUserId(LoginHelper.getUserId().toString())
.setTenantId(LoginHelper.getTenantId());
R<Long> longR = remoteJobService.addClusterJob(dmsJobEntity);
Long jobId = longR.getData();
String time = cron;
Long newJobId = longR.getData();
//通过cron表达式获取下一次执行时间
String time = cron;
Date nextExecution = CronUtils.getNextExecution(time);
add.setPlanTime(nextExecution);
add.setPlanInspectCode(planInspectCode);
add.setJobId(jobId);
add.setJobId(newJobId);
}
Long timeLimitDays = add.getTimeLimitDays()==null ? 0L:add.getTimeLimitDays();
@ -241,9 +243,83 @@ public class DmsPlanInspectServiceImpl implements IDmsPlanInspectService {
* @return
*/
@Override
@GlobalTransactional(rollbackFor = Exception.class)
public Boolean updateByBo(DmsPlanInspectBo bo) {
DmsPlanInspect update = MapstructUtils.convert(bo, DmsPlanInspect.class);
String day = "*";
String month = "*";
String week = "*";
String year = "*";
String cron = "";
if (update.getDay()!=null){
day = update.getDay().toString();
}
if (update.getMonth()!=null){
month = update.getMonth().toString();
}
if (update.getWeek()!=null){
Long weekDay = update.getWeek() + 1;
week = weekDay.toString();
}
if (update.getYear()!=null){
year = update.getYear().toString();
}
if (update.getInspectLevel().equals(1l)){
cron = "0 0 "+update.getHour()+" "+day+" "+month+" ?";
}
if (update.getInspectLevel().equals(2l)){
cron = "0 0 "+update.getHour()+" ?"+" "+month+" "+week;
}
if (update.getInspectLevel().equals(3l)){
cron = "0 0 "+update.getHour()+" "+day+" "+ month+" ? "+year;
}
String time = cron;
//通过cron表达式获取下一次执行时间
Date nextExecution = CronUtils.getNextExecution(time);
update.setPlanTime(nextExecution);
//获取设备总数
Long aLong = dmsBaseInspectRouteMapper.selectAmountByInspectRouteId(update.getInspectRouteId());
update.setDeviceAmount(aLong);
validEntityBeforeSave(update);
Long jobId = bo.getJobId();
String planInspectCode = bo.getPlanInspectCode();
// String cronExpression = bo.getCronExpression();
if (bo.getActiveFlag().equals("1")) {//激活标识1是 0否
if (StringUtils.isNull(jobId)){//之前没激活创建定时任务,创建定时任务
DmsJobEntity dmsJobEntity = new DmsJobEntity();
dmsJobEntity.setRouteKey(AllocationAlgorithmEnum.ROUND)//路由策略:轮询
.setJobName("点巡检计划编号" + planInspectCode + "工单任务")
.setExecutorInfo("stanceInspect")//执行器名称
.setExecutorTimeout(30)//执行超时时间
.setBlockStrategy(JobBlockStrategyEnum.CONCURRENCY)//阻塞策略:并发
.setMaxRetryTimes(2)//最大重试次数
.setTriggerType(TriggerTypeEnum.CRON)//触发器类型cron
.setTriggerInterval(bo.getCronExpression())//间隔时长: cron表达式
.setRetryInterval(3)//重试间隔时长
.setArgsStr("planInspectCode")
.setExtAttrs(planInspectCode)
.setUserId(LoginHelper.getUserId().toString())
.setTenantId(LoginHelper.getTenantId());
R<Long> longR = remoteJobService.addClusterJob(dmsJobEntity);
Long newJobId = longR.getData();
update.setJobId(newJobId);
}else{//之前激活了,修改定时任务
DmsJobEntity dmsJobEntity = new DmsJobEntity();
dmsJobEntity
.setId(jobId)
.setTriggerInterval(bo.getCronExpression())//间隔时长: cron表达式
.setUserId(LoginHelper.getUserId().toString())
.setTenantId(LoginHelper.getTenantId());
R<Void> updateClusterJob = remoteJobService.updateClusterJob(dmsJobEntity);
}
}else{//如果激活状态为01是 0否
if (StringUtils.isNotNull(jobId)) {//之前激活过,创建并关联了任务
//则任务状态为关闭
R<Void> voidR = remoteJobService.updateJobStatus(jobId, 0L);//任务状态0关闭1开启
}
}
return baseMapper.updateById(update) > 0;
}
@ -262,10 +338,19 @@ public class DmsPlanInspectServiceImpl implements IDmsPlanInspectService {
* @return
*/
@Override
@GlobalTransactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
for (Long id : ids){
DmsPlanInspectVo dmsPlanInspectVo = baseMapper.selectVoById(id);
Long jobId = dmsPlanInspectVo.getJobId();
if (StringUtils.isNotNull(jobId)){
//则任务状态为关闭
R<Void> voidR = remoteJobService.updateJobStatus(jobId, 0L);//任务状态0关闭1开启
}
}
return baseMapper.deleteByIds(ids) > 0;
}
}

@ -13,6 +13,7 @@ import org.dromara.common.core.utils.uuid.Seq;
import org.dromara.common.mybatis.Utils.UniqueCodeUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.dms.domain.DmsBillsLubeInstance;
import org.dromara.dms.domain.DmsPlanLube;
import org.dromara.dms.domain.bo.DmsPlanLubeBo;
@ -179,19 +180,6 @@ public class DmsPlanLubeServiceImpl implements IDmsPlanLubeService {
// 生成新的润滑计划编号
String planLubeCode = Seq.getId(Seq.dmsPlanLubeSeqType, Seq.dmsPlanLubeCode);
bo.setPlanLubeCode(planLubeCode);
/*
// 创建系统任务对象
SysJob job = new SysJob();
job.setJobName("润滑计划编号" + planLubeCode + "工单任务");
job.setJobGroup("DEFAULT");
job.setInvokeTarget("ryTask.getDmsBillsLube(\"" + planLubeCode + "\")");
job.setCronExpression(bo.getCronExpression());
job.setMisfirePolicy("1");
job.setConcurrent("1");
job.setStatus("1");
// 添加任务到远程服务并获取任务ID
R<Integer> jobIdR = remoteJobService.add(SecurityConstants.INNER, job);*/
if(bo.getActiveFlag().equals("1")){//激活标识1是 0否
DmsJobEntity dmsJobEntity = new DmsJobEntity();
@ -205,23 +193,22 @@ public class DmsPlanLubeServiceImpl implements IDmsPlanLubeService {
.setTriggerInterval(bo.getCronExpression())//间隔时长: cron表达式
.setRetryInterval(3)//重试间隔时长
.setArgsStr("planLubeCode")
.setExtAttrs(planLubeCode);
.setExtAttrs(planLubeCode)
.setUserId(LoginHelper.getUserId().toString())
.setTenantId(LoginHelper.getTenantId());
R<Long> longR = remoteJobService.addClusterJob(dmsJobEntity);
Long jobId = longR.getData();
// 通过cron表达式获取下一次执行时间
String cronExpression = bo.getCronExpression();
if (StringUtils.isNotEmpty(cronExpression)) {
Date nextExecution = CronUtils.getNextExecution(cronExpression);
bo.setLubeTime(nextExecution);
}
// 设置润滑计划的任务ID
bo.setJobId(jobId);
}
// 计算润滑计划的时间限制(天和小时)
Long timeLimitDays = bo.getTimeLimitDays() == null ? 0L : bo.getTimeLimitDays();
Long timeLimitHours = bo.getTimeLimitHours() == null ? 0L : bo.getTimeLimitHours();
@ -245,82 +232,65 @@ public class DmsPlanLubeServiceImpl implements IDmsPlanLubeService {
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
@GlobalTransactional(rollbackFor = Exception.class)
public Boolean updateByBo(DmsPlanLubeBo bo) {
Long jobId = bo.getJobId();
String cronExpression = bo.getCronExpression();
if (StringUtils.isNotEmpty(cronExpression)) {
// 通过cron表达式获取下一次执行时间
Date nextExecution = CronUtils.getNextExecution(cronExpression);
bo.setLubeTime(nextExecution);
if (bo.getActiveFlag().equals("1")){//激活标识1是 0否
if (jobId == null ) {// 如果没有关联任务,创建新任务
/* String planLubeCode = bo.getPlanLubeCode();
SysJob job = new SysJob();
job.setJobName("润滑计划编号" + planLubeCode + "工单任务");
job.setJobGroup("DEFAULT");
job.setInvokeTarget("ryTask.getDmsBillsLube(\"" + planLubeCode + "\")");
job.setCronExpression(bo.getCronExpression());
job.setMisfirePolicy("1");
job.setConcurrent("1");
job.setStatus("1");
R<Integer> jobIdR = remoteJobService.add(SecurityConstants.INNER, job);
bo.setJobId(jobIdR.getData().longValue());*/
// 通过cron表达式获取下一次执行时间
Date nextExecution = CronUtils.getNextExecution(cronExpression);
bo.setLubeTime(nextExecution);
if (StringUtils.isNull(jobId)) {// 如果没有关联任务,创建新任务
String planLubeCode = bo.getPlanLubeCode();
Long newJobId = SnailJobOpenApi.addClusterJob()
.setRouteKey(AllocationAlgorithmEnum.ROUND)//路由策略:轮询
DmsJobEntity dmsJobEntity = new DmsJobEntity();
dmsJobEntity.setRouteKey(AllocationAlgorithmEnum.ROUND)//路由策略:轮询
.setJobName("润滑计划编号" + planLubeCode + "工单任务")
.setExecutorInfo("stanceLube")//执行器名称
.addArgsStr("planLubeCode", planLubeCode)//执行任务参数
.setExecutorTimeout(30)//执行超时时间
.setBlockStrategy(JobBlockStrategyEnum.CONCURRENCY)//阻塞策略:并发
.setMaxRetryTimes(2)//最大重试次数
.setTriggerType(TriggerTypeEnum.CRON)//触发器类型cron
.setTriggerInterval(bo.getCronExpression())//间隔时长: cron表达式
.setRetryInterval(3)//重试间隔时长
.execute();
.setArgsStr("planLubeCode")
.setExtAttrs(planLubeCode)
.setUserId(LoginHelper.getUserId().toString())
.setTenantId(LoginHelper.getTenantId());
R<Long> longR = remoteJobService.addClusterJob(dmsJobEntity);
Long newJobId = longR.getData();
bo.setJobId(newJobId);
} else {// 如果有关联任务,更新状态
/* // 更新现有任务
SysJob sysJob = remoteJobService.getJobInfo(jobId, SecurityConstants.INNER);
if (sysJob != null) {
sysJob.setCronExpression(bo.getCronExpression());
remoteJobService.update(SecurityConstants.INNER, sysJob);
}*/
// 更新现有任务
String planLubeCode = bo.getPlanLubeCode();
JobResponseVO execute = SnailJobOpenApi.getJobDetail(jobId).execute();
if (execute != null) {
SnailJobOpenApi
.updateJobStatus(jobId)
.setStatus(StatusEnum.YES)
.execute();
SnailJobOpenApi.updateClusterJob(jobId)
.setRouteKey(AllocationAlgorithmEnum.ROUND)//路由策略:轮询
DmsJobEntity dmsJobEntity = new DmsJobEntity();
dmsJobEntity.setId(jobId);//任务ID
dmsJobEntity.setRouteKey(AllocationAlgorithmEnum.ROUND)//路由策略:轮询
.setJobName("润滑计划编号" + planLubeCode + "工单任务")
.setExecutorInfo("stanceLube")//执行器名称
.addArgsStr("planLubeCode", planLubeCode)//执行任务参数
.setExecutorTimeout(30)//执行超时时间
.setBlockStrategy(JobBlockStrategyEnum.CONCURRENCY)//阻塞策略:并发
.setMaxRetryTimes(2)//最大重试次数
.setTriggerType(TriggerTypeEnum.CRON)//触发器类型cron
.setTriggerInterval(bo.getCronExpression())//间隔时长: cron表达式
.setRetryInterval(3)//重试间隔时长
.execute();
}
.setArgsStr("planLubeCode")
.setExtAttrs(planLubeCode)
.setUserId(LoginHelper.getUserId().toString())
.setTenantId(LoginHelper.getTenantId());
R<Void> longR = remoteJobService.updateClusterJob(dmsJobEntity);
}
}else{//如果激活状态为01是 0否
if (jobId != null) {//如果关联了任务,则任务状态为关闭
SnailJobOpenApi
.updateJobStatus(jobId)
.setStatus(StatusEnum.NO)//任务状态0关闭1开启
.execute();
if (StringUtils.isNotNull(jobId)) {//如果关联了任务,则任务状态为关闭
R<Void> voidR = remoteJobService.updateJobStatus(jobId, 0L);//任务状态0关闭1开启
}
}
}
// 计算润滑计划的时间限制(天和小时)
Long timeLimitDays = bo.getTimeLimitDays() == null ? 0L : bo.getTimeLimitDays();
@ -357,18 +327,21 @@ public class DmsPlanLubeServiceImpl implements IDmsPlanLubeService {
* @return
*/
@Override
@GlobalTransactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
// 删除前检查是否可以删除
/* for (Long id : ids) {
//TODO 做一些业务上的校验,判断是否需要校验
}
// 删除前检查是否可以删除
for (Long id : ids) {
// 查询关联的任务ID
DmsPlanLubeVo dmsPlanLube = baseMapper.selectVoById(id);
if (dmsPlanLube != null && dmsPlanLube.getJobId() != null) {
// 删除关联的定时任务
remoteJobService.remove(dmsPlanLube.getJobId(), SecurityConstants.INNER);
Long jobId = dmsPlanLube.getJobId();
if (StringUtils.isNotNull(jobId)) {
//则任务状态为关闭
R<Void> voidR = remoteJobService.updateJobStatus(jobId, 0L);//任务状态0关闭1开启
}
}*/
}
}
return baseMapper.deleteByIds(ids) > 0;
}

@ -15,6 +15,7 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.uuid.Seq;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.dms.domain.DmsPlanMaint;
import org.dromara.dms.domain.bo.DmsPlanMaintBo;
import org.dromara.dms.domain.vo.DmsPlanMaintVo;
@ -217,7 +218,9 @@ public class DmsPlanMaintServiceImpl implements IDmsPlanMaintService {
.setTriggerInterval(bo.getCronExpression())//间隔时长: cron表达式
.setRetryInterval(3)//重试间隔时长
.setArgsStr("planMaintCode")
.setExtAttrs(planMaintCode);
.setExtAttrs(planMaintCode)
.setUserId(LoginHelper.getUserId().toString())
.setTenantId(LoginHelper.getTenantId());
R<Long> longR = remoteJobService.addClusterJob(dmsJobEntity);
Long jobId = longR.getData();
String time = cron;
@ -248,9 +251,93 @@ public class DmsPlanMaintServiceImpl implements IDmsPlanMaintService {
* @return
*/
@Override
@GlobalTransactional(rollbackFor = Exception.class)
public Boolean updateByBo(DmsPlanMaintBo bo) {
DmsPlanMaint update = MapstructUtils.convert(bo, DmsPlanMaint.class);
String day = "*";
String month = "*";
String week = "*";
String year = "*";
String cron = "";
if (update.getDay()!=null){
day = update.getDay().toString();
}
if (update.getMonth()!=null){
month = update.getMonth().toString();
}
if (update.getWeek()!=null){
Long weekDay = update.getWeek() + 1;
week = weekDay.toString();
}
if (update.getYear()!=null){
year = update.getYear().toString();
}
if (update.getMaintLevel().equals(1l)){
cron = "0 0 "+update.getHour()+" "+day+" "+month+" ?";
}
if (update.getMaintLevel().equals(2l)){
cron = "0 0 "+update.getHour()+" ?"+" "+month+" "+week;
}
if (update.getMaintLevel().equals(3l)){
cron = "0 0 "+update.getHour()+" "+day+" "+ month+" ? "+year;
}
Long timeLimitDays = update.getTimeLimitDays()==null?0L:update.getTimeLimitDays();
Long timeLimitHours = update.getTimeLimitHours() == null?0L:update.getTimeLimitHours();
update.setTimeLimit((timeLimitDays * SECONDS_PER_DAY)
+ (timeLimitHours * SECONDS_PER_HOUR));
String time = cron;
//通过cron表达式获取下一次执行时间
Date nextExecution = CronUtils.getNextExecution(time);
update.setMaintTime(nextExecution);
validEntityBeforeSave(update);
Long jobId = bo.getJobId();
String planMaintCode = bo.getPlanMaintCode();
if (bo.getActiveFlag().equals("1")){
if (StringUtils.isNull(jobId)){//之前没激活创建定时任务,创建定时任务
DmsJobEntity dmsJobEntity = new DmsJobEntity();
dmsJobEntity.setRouteKey(AllocationAlgorithmEnum.ROUND)//路由策略:轮询
.setJobName("保养计划编号" + planMaintCode + "工单任务")
.setExecutorInfo("stanceMaint")//执行器名称
.setExecutorTimeout(30)//执行超时时间
.setBlockStrategy(JobBlockStrategyEnum.CONCURRENCY)//阻塞策略:并发
.setMaxRetryTimes(2)//最大重试次数
.setTriggerType(TriggerTypeEnum.CRON)//触发器类型cron
.setTriggerInterval(bo.getCronExpression())//间隔时长: cron表达式
.setRetryInterval(3)//重试间隔时长
.setArgsStr("planMaintCode")
.setExtAttrs(planMaintCode)
.setUserId(LoginHelper.getUserId().toString())
.setTenantId(LoginHelper.getTenantId());
R<Long> longR = remoteJobService.addClusterJob(dmsJobEntity);
Long newJobId = longR.getData();
update.setMaintTime(nextExecution);
update.setJobId(newJobId);
}else{//之前激活了,修改定时任务
DmsJobEntity dmsJobEntity = new DmsJobEntity();
dmsJobEntity.setId(jobId);
dmsJobEntity.setRouteKey(AllocationAlgorithmEnum.ROUND)//路由策略:轮询
.setJobName("保养计划编号" + planMaintCode + "工单任务")
.setExecutorInfo("stanceMaint")//执行器名称
.setExecutorTimeout(30)//执行超时时间
.setBlockStrategy(JobBlockStrategyEnum.CONCURRENCY)//阻塞策略:并发
.setMaxRetryTimes(2)//最大重试次数
.setTriggerType(TriggerTypeEnum.CRON)//触发器类型cron
.setTriggerInterval(bo.getCronExpression())//间隔时长: cron表达式
.setRetryInterval(3)//重试间隔时长
.setArgsStr("planMaintCode")
.setExtAttrs(planMaintCode)
.setUserId(LoginHelper.getUserId().toString())
.setTenantId(LoginHelper.getTenantId());
R<Void> updateClusterJob = remoteJobService.updateClusterJob(dmsJobEntity);
}
}else{//如果激活状态为01是 0否
if (StringUtils.isNotNull(jobId)){//之前激活过,创建并关联了任务
//则任务状态为关闭
R<Void> voidR = remoteJobService.updateJobStatus(jobId, 0L);//任务状态0关闭1开启
}
}
return baseMapper.updateById(update) > 0;
}
@ -269,10 +356,19 @@ public class DmsPlanMaintServiceImpl implements IDmsPlanMaintService {
* @return
*/
@Override
@GlobalTransactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
for (Long id : ids){
DmsPlanMaintVo dmsPlanMaintVo = baseMapper.selectVoById(id);
Long jobId = dmsPlanMaintVo.getJobId();
if (StringUtils.isNotNull(jobId)){
//则任务状态为关闭
R<Void> voidR = remoteJobService.updateJobStatus(jobId, 0L);//任务状态0关闭1开启
}
}
return baseMapper.deleteByIds(ids) > 0;
}
}

@ -23,6 +23,10 @@ public class RemoteJobServiceImpl implements RemoteJobService {
// private final JobMapper jobMapper;
//常量
private static final String tenant = "tenantId";
private static final String user = "userId";
/**
*
*
@ -43,6 +47,8 @@ public class RemoteJobServiceImpl implements RemoteJobService {
.setTriggerType(dmsJobEntity.getTriggerType())//触发类型:2. 固定时间 3.CRON 表达式 99.工作流
.setTriggerInterval(dmsJobEntity.getTriggerInterval())//触发间隔
.addArgsStr(dmsJobEntity.getArgsStr(), dmsJobEntity.getExtAttrs())//执行任务参数
.addArgsStr(tenant, dmsJobEntity.getTenantId())//租户ID执行任务参数手动传参
.addArgsStr(user, dmsJobEntity.getUserId())//用户ID执行任务参数手动传参
.setRetryInterval(dmsJobEntity.getRetryInterval())//重试间隔时长(秒)
.execute();
if (jobId != null) {
@ -75,6 +81,8 @@ public class RemoteJobServiceImpl implements RemoteJobService {
.setTriggerType(dmsJobEntity.getTriggerType())//触发类型:2. 固定时间 3.CRON 表达式 99.工作流
.setTriggerInterval(dmsJobEntity.getTriggerInterval())//触发间隔
.addArgsStr(dmsJobEntity.getArgsStr(), dmsJobEntity.getExtAttrs())//执行任务参数
.addArgsStr(tenant, dmsJobEntity.getTenantId())//租户ID执行任务参数手动传参
.addArgsStr(user, dmsJobEntity.getUserId())//用户ID执行任务参数手动传参
.setRetryInterval(dmsJobEntity.getRetryInterval())//重试间隔时长(秒)
.execute();
return success ? R.ok() : R.fail("修改集群任务失败");

Loading…
Cancel
Save