新增数据迁移任务到定时任务白名单;优化默认收货时间范围逻辑
This commit is contained in:
+204
@@ -0,0 +1,204 @@
|
||||
package com.bms.web.controller.tool;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import org.quartz.SchedulerException;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.PutMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import com.bms.common.annotation.Log;
|
||||
import com.bms.common.constant.ScheduleConstants;
|
||||
import com.bms.common.core.controller.BaseController;
|
||||
import com.bms.common.core.domain.AjaxResult;
|
||||
import com.bms.common.core.page.TableDataInfo;
|
||||
import com.bms.common.enums.BusinessType;
|
||||
import com.bms.common.exception.ServiceException;
|
||||
import com.bms.common.exception.job.TaskException;
|
||||
import com.bms.common.utils.StringUtils;
|
||||
import com.bms.quartz.domain.SysJob;
|
||||
import com.bms.quartz.service.ISysJobService;
|
||||
import com.bms.quartz.util.CronUtils;
|
||||
import com.bms.system.domain.SysDataMigration;
|
||||
import com.bms.system.domain.SysDataMigrationLog;
|
||||
import com.bms.system.service.ISysDataMigrationService;
|
||||
|
||||
/** 系统工具 - 数据迁移:保存 SQL、手动/定时执行(Quartz) */
|
||||
@RestController
|
||||
@RequestMapping("/tool/migration")
|
||||
public class DataMigrationController extends BaseController
|
||||
{
|
||||
private static final String JOB_GROUP = "DATA_MIGRATION";
|
||||
|
||||
@Autowired
|
||||
private ISysDataMigrationService migrationService;
|
||||
|
||||
@Autowired
|
||||
private ISysJobService jobService;
|
||||
|
||||
@PreAuthorize("@ss.hasPermi('tool:migration:list')")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(SysDataMigration query)
|
||||
{
|
||||
startPage();
|
||||
List<SysDataMigration> list = migrationService.selectSysDataMigrationList(query);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
@PreAuthorize("@ss.hasPermi('tool:migration:query')")
|
||||
@GetMapping("/{migrationId}")
|
||||
public AjaxResult getInfo(@PathVariable Long migrationId)
|
||||
{
|
||||
return success(migrationService.selectSysDataMigrationById(migrationId));
|
||||
}
|
||||
|
||||
@PreAuthorize("@ss.hasPermi('tool:migration:add')")
|
||||
@Log(title = "数据迁移", businessType = BusinessType.INSERT)
|
||||
@PostMapping
|
||||
public AjaxResult add(@Validated @RequestBody SysDataMigration row) throws SchedulerException, TaskException
|
||||
{
|
||||
row.setCreateBy(getUsername());
|
||||
migrationService.insertSysDataMigration(row);
|
||||
syncJob(row);
|
||||
return success(row);
|
||||
}
|
||||
|
||||
@PreAuthorize("@ss.hasPermi('tool:migration:edit')")
|
||||
@Log(title = "数据迁移", businessType = BusinessType.UPDATE)
|
||||
@PutMapping
|
||||
public AjaxResult edit(@Validated @RequestBody SysDataMigration row) throws SchedulerException, TaskException
|
||||
{
|
||||
row.setUpdateBy(getUsername());
|
||||
migrationService.updateSysDataMigration(row);
|
||||
SysDataMigration fresh = migrationService.selectSysDataMigrationById(row.getMigrationId());
|
||||
syncJob(fresh);
|
||||
return success(fresh);
|
||||
}
|
||||
|
||||
@PreAuthorize("@ss.hasPermi('tool:migration:remove')")
|
||||
@Log(title = "数据迁移", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{migrationIds}")
|
||||
public AjaxResult remove(@PathVariable Long[] migrationIds) throws SchedulerException
|
||||
{
|
||||
if (migrationIds != null)
|
||||
{
|
||||
for (Long id : migrationIds)
|
||||
{
|
||||
SysDataMigration row = migrationService.selectSysDataMigrationById(id);
|
||||
if (row != null)
|
||||
{
|
||||
removeJob(row);
|
||||
}
|
||||
}
|
||||
}
|
||||
return toAjax(migrationService.deleteSysDataMigrationByIds(migrationIds));
|
||||
}
|
||||
|
||||
@PreAuthorize("@ss.hasPermi('tool:migration:run')")
|
||||
@Log(title = "数据迁移执行", businessType = BusinessType.OTHER)
|
||||
@PostMapping("/run/{migrationId}")
|
||||
public AjaxResult run(@PathVariable Long migrationId)
|
||||
{
|
||||
Map<String, Object> result = migrationService.executeMigration(migrationId, "MANUAL", getUsername());
|
||||
return success(result);
|
||||
}
|
||||
|
||||
@PreAuthorize("@ss.hasPermi('tool:migration:log')")
|
||||
@GetMapping("/log/list")
|
||||
public TableDataInfo logList(SysDataMigrationLog query)
|
||||
{
|
||||
startPage();
|
||||
List<SysDataMigrationLog> list = migrationService.selectSysDataMigrationLogList(query);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
private void syncJob(SysDataMigration row) throws SchedulerException, TaskException
|
||||
{
|
||||
if (row == null || row.getMigrationId() == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
boolean enable = "0".equals(row.getStatus()) && StringUtils.isNotEmpty(row.getCronExpression());
|
||||
if (enable && !CronUtils.isValid(row.getCronExpression()))
|
||||
{
|
||||
throw new ServiceException("Cron 表达式不正确");
|
||||
}
|
||||
if (!enable)
|
||||
{
|
||||
removeJob(row);
|
||||
return;
|
||||
}
|
||||
|
||||
String invokeTarget = "dataMigrationTask.executeById(" + row.getMigrationId() + "L)";
|
||||
String jobName = "data-migration-" + row.getMigrationId();
|
||||
if (row.getJobId() != null)
|
||||
{
|
||||
SysJob existed = jobService.selectJobById(row.getJobId());
|
||||
if (existed != null)
|
||||
{
|
||||
existed.setJobName(jobName);
|
||||
existed.setJobGroup(JOB_GROUP);
|
||||
existed.setInvokeTarget(invokeTarget);
|
||||
existed.setCronExpression(row.getCronExpression());
|
||||
existed.setMisfirePolicy("3");
|
||||
existed.setConcurrent("1");
|
||||
existed.setUpdateBy(getUsername());
|
||||
existed.setRemark(row.getMigrationName());
|
||||
jobService.updateJob(existed);
|
||||
existed.setStatus(ScheduleConstants.Status.NORMAL.getValue());
|
||||
jobService.changeStatus(existed);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
SysJob job = new SysJob();
|
||||
job.setJobName(jobName);
|
||||
job.setJobGroup(JOB_GROUP);
|
||||
job.setInvokeTarget(invokeTarget);
|
||||
job.setCronExpression(row.getCronExpression());
|
||||
job.setMisfirePolicy("3");
|
||||
job.setConcurrent("1");
|
||||
job.setCreateBy(getUsername());
|
||||
job.setRemark(row.getMigrationName());
|
||||
jobService.insertJob(job);
|
||||
job.setStatus(ScheduleConstants.Status.NORMAL.getValue());
|
||||
jobService.changeStatus(job);
|
||||
|
||||
SysDataMigration patch = new SysDataMigration();
|
||||
patch.setMigrationId(row.getMigrationId());
|
||||
patch.setJobId(job.getJobId());
|
||||
patch.setUpdateBy(getUsername());
|
||||
migrationService.updateSysDataMigration(patch);
|
||||
row.setJobId(job.getJobId());
|
||||
}
|
||||
|
||||
private void removeJob(SysDataMigration row) throws SchedulerException
|
||||
{
|
||||
if (row == null || row.getJobId() == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
SysJob job = jobService.selectJobById(row.getJobId());
|
||||
if (job != null)
|
||||
{
|
||||
jobService.deleteJob(job);
|
||||
}
|
||||
SysDataMigration patch = new SysDataMigration();
|
||||
patch.setMigrationId(row.getMigrationId());
|
||||
patch.setJobId(null);
|
||||
// keep job_id clear: update XML only sets jobId when non-null; force via dedicated clear
|
||||
clearJobId(row.getMigrationId());
|
||||
}
|
||||
|
||||
private void clearJobId(Long migrationId)
|
||||
{
|
||||
migrationService.clearJobId(migrationId);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user