package com.vincent.rsf.server.manager.controller;
|
|
import com.vincent.rsf.framework.common.R;
|
import com.vincent.rsf.server.manager.schedules.AsnOrderLogSchedule;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.http.HttpStatus;
|
import org.springframework.http.ResponseEntity;
|
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.util.Arrays;
|
import java.util.List;
|
|
/**
|
* 定时任务手动触发接口,仅允许本机请求(127.0.0.1 / ::1)。
|
*/
|
@Slf4j
|
@RestController
|
@RequestMapping("/schedule")
|
@Api(value = "定时任务触发", tags = "定时任务手动触发(仅本地)")
|
public class ScheduleTriggerController {
|
|
private static final List<String> LOCALHOST_IPS = Arrays.asList("127.0.0.1", "0:0:0:0:0:0:0:1", "::1");
|
|
private final AsnOrderLogSchedule asnOrderLogSchedule;
|
|
public ScheduleTriggerController(AsnOrderLogSchedule asnOrderLogSchedule) {
|
this.asnOrderLogSchedule = asnOrderLogSchedule;
|
}
|
|
private static boolean isLocalRequest(HttpServletRequest request) {
|
String remote = request.getRemoteAddr();
|
if (remote != null && LOCALHOST_IPS.contains(remote)) {
|
return true;
|
}
|
String forwarded = request.getHeader("X-Forwarded-For");
|
if (forwarded != null && !forwarded.isEmpty()) {
|
remote = forwarded.split(",")[0].trim();
|
}
|
return remote != null && LOCALHOST_IPS.contains(remote);
|
}
|
|
@ApiOperation("手动执行入库转历史(InStockToLog),仅允许本地请求")
|
@PostMapping("/trigger/inStockToLog")
|
public ResponseEntity<R> triggerInStockToLog(HttpServletRequest request) {
|
if (!isLocalRequest(request)) {
|
log.warn("拒绝非本地请求触发 InStockToLog,remote={}", request.getRemoteAddr());
|
return ResponseEntity.status(HttpStatus.FORBIDDEN).body(R.error("仅允许本地请求"));
|
}
|
try {
|
asnOrderLogSchedule.InStockToLog();
|
return ResponseEntity.ok(R.ok("执行完成"));
|
} catch (Exception e) {
|
log.error("InStockToLog 执行失败", e);
|
return ResponseEntity.ok(R.error(e.getMessage()));
|
}
|
}
|
|
@ApiOperation("手动执行物理删除上上个月之前已逻辑删除的原单及明细,仅允许本地请求")
|
@PostMapping("/trigger/physicalDeleteLogicDeletedOrders")
|
public ResponseEntity<R> triggerPhysicalDeleteLogicDeletedOrders(HttpServletRequest request) {
|
if (!isLocalRequest(request)) {
|
log.warn("拒绝非本地请求触发 physicalDeleteLogicDeletedOrders,remote={}", request.getRemoteAddr());
|
return ResponseEntity.status(HttpStatus.FORBIDDEN).body(R.error("仅允许本地请求"));
|
}
|
try {
|
asnOrderLogSchedule.physicalDeleteLogicDeletedOrders();
|
return ResponseEntity.ok(R.ok("执行完成"));
|
} catch (Exception e) {
|
log.error("physicalDeleteLogicDeletedOrders 执行失败", e);
|
return ResponseEntity.ok(R.error(e.getMessage()));
|
}
|
}
|
}
|