异常任务重新分配机器人
This commit is contained in:
parent
e67afa8c3d
commit
d8d2419eb2
@ -38,15 +38,6 @@
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.integration</groupId>
|
||||
<artifactId>spring-integration-mqtt</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.paho</groupId>
|
||||
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.swagger.core.v3</groupId>
|
||||
<artifactId>swagger-annotations</artifactId>
|
||||
@ -62,6 +53,25 @@
|
||||
<artifactId>spring-cloud-starter-openfeign</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- 业务组件 -->
|
||||
<dependency>
|
||||
<groupId>cn.iocoder.cloud</groupId>
|
||||
<artifactId>yudao-spring-boot-starter-biz-data-permission</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.iocoder.cloud</groupId>
|
||||
<artifactId>yudao-spring-boot-starter-biz-tenant</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.iocoder.cloud</groupId>
|
||||
<artifactId>yudao-spring-boot-starter-biz-ip</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Web 相关 -->
|
||||
<dependency>
|
||||
<groupId>cn.iocoder.cloud</groupId>
|
||||
<artifactId>yudao-spring-boot-starter-security</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
|
@ -0,0 +1,35 @@
|
||||
package cn.iocoder.yudao.module.remote.controller.login;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.module.remote.service.login.LoginService;
|
||||
import cn.iocoder.yudao.module.system.api.remote.dto.LoginCheckDTO;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.annotation.security.PermitAll;
|
||||
import javax.validation.Valid;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
|
||||
@Tag(name = "管理后台 - 远遥登录")
|
||||
@RestController
|
||||
@RequestMapping("/remote/login")
|
||||
@Validated
|
||||
public class LoginController {
|
||||
|
||||
@Resource
|
||||
private LoginService loginService;
|
||||
|
||||
@PostMapping("/check")
|
||||
@Operation(summary = "测试通讯")
|
||||
@PermitAll
|
||||
public CommonResult<Boolean> checkCommunication(@Valid @RequestBody LoginCheckDTO loginCheckDTO) {
|
||||
return success(loginService.checkCommunication(loginCheckDTO));
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
package cn.iocoder.yudao.module.remote.framework.security.config;
|
||||
|
||||
import cn.iocoder.yudao.framework.security.config.AuthorizeRequestsCustomizer;
|
||||
import cn.iocoder.yudao.module.system.enums.ApiConstants;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||
import org.springframework.security.config.annotation.web.configurers.AuthorizeHttpRequestsConfigurer;
|
||||
|
||||
/**
|
||||
* System 模块的 Security 配置
|
||||
*/
|
||||
@Configuration(proxyBeanMethods = false, value = "systemSecurityConfiguration")
|
||||
public class SecurityConfiguration {
|
||||
|
||||
@Bean("systemAuthorizeRequestsCustomizer")
|
||||
public AuthorizeRequestsCustomizer authorizeRequestsCustomizer() {
|
||||
return new AuthorizeRequestsCustomizer() {
|
||||
|
||||
@Override
|
||||
public void customize(AuthorizeHttpRequestsConfigurer<HttpSecurity>.AuthorizationManagerRequestMatcherRegistry registry) {
|
||||
// TODO 芋艿:这个每个项目都需要重复配置,得捉摸有没通用的方案
|
||||
// Swagger 接口文档
|
||||
registry.requestMatchers("/v3/api-docs/**").permitAll()
|
||||
.requestMatchers("/webjars/**").permitAll()
|
||||
.requestMatchers("/swagger-ui").permitAll()
|
||||
.requestMatchers("/swagger-ui/**").permitAll();
|
||||
// Druid 监控
|
||||
registry.requestMatchers("/druid/**").permitAll();
|
||||
// Spring Boot Actuator 的安全配置
|
||||
registry.requestMatchers("/actuator").permitAll()
|
||||
.requestMatchers("/actuator/**").permitAll();
|
||||
// RPC 服务的安全配置
|
||||
registry.requestMatchers(ApiConstants.PREFIX + "/**").permitAll();
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
package cn.iocoder.yudao.module.remote.service.login;
|
||||
|
||||
import cn.iocoder.yudao.module.system.api.remote.dto.LoginCheckDTO;
|
||||
|
||||
public interface LoginService {
|
||||
Boolean checkCommunication(LoginCheckDTO loginCheckDTO);
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package cn.iocoder.yudao.module.remote.service.login;
|
||||
|
||||
import cn.iocoder.yudao.module.system.api.remote.dto.LoginCheckDTO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class LoginServiceImpl implements LoginService{
|
||||
|
||||
|
||||
/*@Resource
|
||||
private RemoteLoginApi remoteLoginApi;*/
|
||||
|
||||
private String checkUrl = "/system/remote/controller-information/checkAddress";
|
||||
|
||||
/**
|
||||
* 测试通讯
|
||||
* @param loginCheckDTO
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Boolean checkCommunication(LoginCheckDTO loginCheckDTO) {
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
String url = loginCheckDTO.getMailAddress()+"/"+loginCheckDTO.getPort()+checkUrl;
|
||||
String str = restTemplate.getForObject(url, String.class);
|
||||
System.out.println("结果 :"+str);
|
||||
return true;
|
||||
}
|
||||
}
|
@ -42,6 +42,64 @@ knife4j:
|
||||
setting:
|
||||
language: zh_cn
|
||||
|
||||
yudao:
|
||||
info:
|
||||
version: 1.0.0
|
||||
base-package: cn.iocoder.yudao.module.remote
|
||||
web:
|
||||
admin-ui:
|
||||
url: http://dashboard.yudao.iocoder.cn # Admin 管理后台 UI 的地址
|
||||
xss:
|
||||
enable: false
|
||||
exclude-urls: # 如下 url,仅仅是为了演示,去掉配置也没关系
|
||||
- ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求
|
||||
swagger:
|
||||
title: 管理后台
|
||||
description: 提供管理员管理的所有功能
|
||||
version: ${yudao.info.version}
|
||||
tenant: # 多租户相关配置项
|
||||
enable: true
|
||||
ignore-urls:
|
||||
- /admin-api/system/tenant/get-id-by-name # 基于名字获取租户,不许带租户编号
|
||||
- /admin-api/system/tenant/get-by-website # 基于域名获取租户,不许带租户编号
|
||||
- /admin-api/system/captcha/get-image # 获取图片验证码,和租户无关
|
||||
- /admin-api/system/captcha/get # 获取图片验证码,和租户无关
|
||||
- /admin-api/system/captcha/check # 校验图片验证码,和租户无关
|
||||
- /admin-api/system/sms/callback/* # 短信回调接口,无法带上租户编号
|
||||
- /rpc-api/system/tenant/valid # 防止递归。避免调用 /rpc-api/system/tenant/valid 接口时,又去触发 /rpc-api/system/tenant/valid 去校验
|
||||
- /rpc-api/system/tenant/id-list # 获得租户列表的时候,无需传递租户编号
|
||||
- /rpc-api/system/oauth2/token/check # 访问令牌校验时,无需传递租户编号;主要解决上传文件的场景,前端不会传递 tenant-id!
|
||||
ignore-tables:
|
||||
- system_tenant
|
||||
- system_tenant_package
|
||||
- system_dict_data
|
||||
- system_dict_type
|
||||
- system_error_code
|
||||
- system_menu
|
||||
- system_sms_channel
|
||||
- system_sms_template
|
||||
- system_sms_log
|
||||
- system_sensitive_word
|
||||
- system_oauth2_client
|
||||
- system_mail_account
|
||||
- system_mail_template
|
||||
- system_mail_log
|
||||
- system_notify_template
|
||||
ignore-caches:
|
||||
- user_role_ids
|
||||
- permission_menu_ids
|
||||
- oauth_client
|
||||
- notify_template
|
||||
- mail_account
|
||||
- mail_template
|
||||
- sms_template
|
||||
sms-code: # 短信验证码相关的配置项
|
||||
expire-times: 10m
|
||||
send-frequency: 1m
|
||||
send-maximum-quantity-per-day: 10
|
||||
begin-code: 9999 # 这里配置 9999 的原因是,测试方便。
|
||||
end-code: 9999 # 这里配置 9999 的原因是,测试方便。
|
||||
|
||||
debug: false
|
||||
|
||||
|
||||
|
@ -0,0 +1,19 @@
|
||||
package cn.iocoder.yudao.module.system.api.remote;
|
||||
|
||||
import cn.iocoder.yudao.module.system.api.remote.dto.LoginCheckDTO;
|
||||
import cn.iocoder.yudao.module.system.enums.ApiConstants;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
||||
@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory =
|
||||
@Tag(name = "RPC 服务 - 远遥登录相关的服务调用")
|
||||
public interface RemoteLoginApi {
|
||||
String PREFIX = ApiConstants.PREFIX + "/remote";
|
||||
|
||||
@PostMapping(PREFIX + "/checkCommunication")
|
||||
@Operation(summary = "路径规划需要初始化信息")
|
||||
Boolean checkCommunication(@RequestBody LoginCheckDTO loginCheckDTO);
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
package cn.iocoder.yudao.module.system.api.remote.dto;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class LoginCheckDTO {
|
||||
@Schema(description = "通讯地址")
|
||||
private String mailAddress;
|
||||
|
||||
@Schema(description = "通讯端口")
|
||||
private String port;
|
||||
}
|
@ -270,4 +270,6 @@ public interface ErrorCodeConstants {
|
||||
ErrorCode TASK_PROCEED_NOT_EXISTS = new ErrorCode(1_002_051_001, "车辆衔接任务不存在");
|
||||
// ========== 车辆(地图)急停记录 1_002_052_001 ==========
|
||||
ErrorCode MAP_STOP_NOT_EXISTS = new ErrorCode(1_002_052_001, "车辆(地图)急停记录不存在");
|
||||
// ========== 远遥设备信息 1_002_053_001 ==========
|
||||
ErrorCode CONTROLLER_INFORMATION_NOT_EXISTS = new ErrorCode(1_002_053_001, "远遥设备信息不存在");
|
||||
}
|
||||
|
@ -0,0 +1,17 @@
|
||||
package cn.iocoder.yudao.module.system.api.remote;
|
||||
|
||||
import cn.iocoder.yudao.module.system.api.remote.dto.LoginCheckDTO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@Slf4j
|
||||
@RestController // 提供 RESTful API 接口,给 Feign 调用
|
||||
@Validated
|
||||
public class RemoteLoginApiImpl implements RemoteLoginApi{
|
||||
|
||||
@Override
|
||||
public Boolean checkCommunication(LoginCheckDTO loginCheckDTO) {
|
||||
return null;
|
||||
}
|
||||
}
|
@ -120,7 +120,7 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
String robotDoingActionKey = RobotTaskChcheConstant.ROBOT_QUERY_DOING_ACTION + robotCompleteTaskDTO.getMac();
|
||||
|
||||
if (ObjectUtil.isEmpty(robotCompleteTaskDTO.getOrderId())) {
|
||||
log.info("没有任务id :{}",JSON.toJSONString(robotCompleteTaskDTO));
|
||||
log.info("没有任务id :{}", JSON.toJSONString(robotCompleteTaskDTO));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -278,6 +278,20 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
// taskService.closeTaskDetail(robotCompleteTaskDTO.getOrderId().toString(),robotCompleteTaskDTO.getMac());
|
||||
String robotNo = robotInformationService.getRobotNoByMac(robotCompleteTaskDTO.getMac());
|
||||
|
||||
String msg = "";
|
||||
if (PathTaskTypeEnum.TAKE_RELEASE.getType().equals(robotCompleteTaskDTO.getOrderType())
|
||||
|| PathTaskTypeEnum.TAKE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||
RobotTaskDetailDO robotTaskDetailDO = robotTaskDetailMapper.selectById(robotCompleteTaskDTO.getOrderId());
|
||||
if (RobotTaskStageEnum.GO_TAKE.getType().equals(robotTaskDetailDO.getTaskStage())
|
||||
|| RobotTaskStageEnum.UN_START.getType().equals(robotTaskDetailDO.getTaskStage())) {
|
||||
robotTaskDetailDO.setTaskStatus(RobotTaskDetailStatusEnum.NEW.getType());
|
||||
robotTaskDetailDO.setTaskStage(RobotTaskStageEnum.UN_START.getType());
|
||||
robotTaskDetailDO.setRobotNo("");
|
||||
robotTaskDetailMapper.updateById(robotTaskDetailDO);
|
||||
String taskNo = taskDetailService.getTaskNoByDetailId(robotCompleteTaskDTO.getOrderId());
|
||||
msg = robotNo + "_" + "车辆发生异常,重新分配其他车辆执行此任务" + taskNo;
|
||||
}
|
||||
}
|
||||
//先不释放库位状态
|
||||
/*if (RobotTaksOrderTypeEnum.TASK.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||
RobotTaskDetailDO robotTaskDetailDO = closeTaskDetail(robotCompleteTaskDTO.getOrderId());
|
||||
@ -309,16 +323,19 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
|
||||
String solve = "";
|
||||
if (!PathTaskTypeEnum.MOVE_TO_WAIT.getType().equals(robotCompleteTaskDTO.getOrderType())
|
||||
&& !PathTaskTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())) {
|
||||
&& !PathTaskTypeEnum.AUTO_CHARGE.getType().equals(robotCompleteTaskDTO.getOrderType())
|
||||
&& ObjectUtil.isEmpty(msg)) {
|
||||
String taskNo = taskDetailService.getTaskNoByDetailId(robotCompleteTaskDTO.getOrderId());
|
||||
solve = " 并且到任务列表关闭任务 " + taskNo;
|
||||
}
|
||||
|
||||
msg = ObjectUtil.isEmpty(msg) ? robotNo + "_" + robotCompleteTaskDTO.getMessage() : msg;
|
||||
|
||||
RobotWarnMsgDO warnMsg = RobotWarnMsgDO.builder().warnLevel(4)
|
||||
.warnCode(robotCompleteTaskDTO.getStatusCode())
|
||||
.robotNo(robotNo)
|
||||
.warnType(RobotWarnType.ROBOT_WARN.getType())
|
||||
.warnMsg(robotNo + "_" + robotCompleteTaskDTO.getMessage())
|
||||
.warnMsg(msg)
|
||||
.warnSolve(robotCompleteTaskDTO.getSolution() + solve)
|
||||
.build();
|
||||
warnMsgMapper.insert(warnMsg);
|
||||
@ -547,7 +564,8 @@ public class RobotTaskStatusApiImpl implements RobotTaskStatusApi {
|
||||
@Override
|
||||
public void robotDoneTask(RobotCompleteTaskDTO robotCompleteTaskDTO) {
|
||||
taskExecutor.execute(() -> {
|
||||
String requestId = UUID.randomUUID().toString().replace("-","");;
|
||||
String requestId = UUID.randomUUID().toString().replace("-", "");
|
||||
;
|
||||
MDC.put(CommonConstant.REQUEST_ID, requestId);
|
||||
try {
|
||||
doRobotDoneTask(robotCompleteTaskDTO);
|
||||
|
@ -0,0 +1,108 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.remote;
|
||||
|
||||
import cn.iocoder.yudao.module.system.controller.admin.remote.vo.RemoteControllerInformationPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.remote.vo.RemoteControllerInformationRespVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.remote.vo.RemoteControllerInformationSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.remote.RemoteControllerInformationDO;
|
||||
import cn.iocoder.yudao.module.system.service.remote.RemoteControllerInformationService;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
|
||||
import javax.annotation.security.PermitAll;
|
||||
import javax.validation.constraints.*;
|
||||
import javax.validation.*;
|
||||
import javax.servlet.http.*;
|
||||
import java.util.*;
|
||||
import java.io.IOException;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||
|
||||
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
|
||||
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
|
||||
|
||||
|
||||
@Tag(name = "管理后台 - 远遥设备信息")
|
||||
@RestController
|
||||
@RequestMapping("/system/remote/controller-information") //不能修改/删除
|
||||
@Validated
|
||||
public class RemoteControllerInformationController {
|
||||
|
||||
@Resource
|
||||
private RemoteControllerInformationService controllerInformationService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建远遥设备信息")
|
||||
@PreAuthorize("@ss.hasPermission('remote:controller-information:create')")
|
||||
public CommonResult<Long> createControllerInformation(@Valid @RequestBody RemoteControllerInformationSaveReqVO createReqVO) {
|
||||
return success(controllerInformationService.createControllerInformation(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新远遥设备信息")
|
||||
@PreAuthorize("@ss.hasPermission('remote:controller-information:update')")
|
||||
public CommonResult<Boolean> updateControllerInformation(@Valid @RequestBody RemoteControllerInformationSaveReqVO updateReqVO) {
|
||||
controllerInformationService.updateControllerInformation(updateReqVO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除远遥设备信息")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('remote:controller-information:delete')")
|
||||
public CommonResult<Boolean> deleteControllerInformation(@RequestParam("id") Long id) {
|
||||
controllerInformationService.deleteControllerInformation(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得远遥设备信息")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('remote:controller-information:query')")
|
||||
public CommonResult<RemoteControllerInformationRespVO> getControllerInformation(@RequestParam("id") Long id) {
|
||||
RemoteControllerInformationDO controllerInformation = controllerInformationService.getControllerInformation(id);
|
||||
return success(BeanUtils.toBean(controllerInformation, RemoteControllerInformationRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得远遥设备信息分页")
|
||||
@PreAuthorize("@ss.hasPermission('remote:controller-information:query')")
|
||||
public CommonResult<PageResult<RemoteControllerInformationRespVO>> getControllerInformationPage(@Valid RemoteControllerInformationPageReqVO pageReqVO) {
|
||||
PageResult<RemoteControllerInformationDO> pageResult = controllerInformationService.getControllerInformationPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, RemoteControllerInformationRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出远遥设备信息 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('remote:controller-information:export')")
|
||||
@ApiAccessLog(operateType = EXPORT)
|
||||
public void exportControllerInformationExcel(@Valid RemoteControllerInformationPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<RemoteControllerInformationDO> list = controllerInformationService.getControllerInformationPage(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "远遥设备信息.xls", "数据", RemoteControllerInformationRespVO.class,
|
||||
BeanUtils.toBean(list, RemoteControllerInformationRespVO.class));
|
||||
}
|
||||
|
||||
/**
|
||||
* 不能修改/删除
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/checkAddress")
|
||||
@Operation(summary = "校验远遥的地址")
|
||||
@PermitAll
|
||||
public CommonResult<String> checkAddress() {
|
||||
return success("连接");
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.remote.vo;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 远遥设备信息分页 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class RemoteControllerInformationPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "远遥的设备IP")
|
||||
private String remoteIp;
|
||||
|
||||
@Schema(description = "AGV编号")
|
||||
private String robotNo;
|
||||
|
||||
@Schema(description = "远遥模式(0:自动模式, 1:手动模式, 2:自由模式)")
|
||||
private Integer remoteMode;
|
||||
|
||||
@Schema(description = "协控(0:关闭协控, 1:开启协控)")
|
||||
private Integer collaborativeControl;
|
||||
|
||||
@Schema(description = "远遥的其他信息")
|
||||
private String remoteMsg;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.remote.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.excel.annotation.*;
|
||||
|
||||
@Schema(description = "管理后台 - 远遥设备信息 Response VO")
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class RemoteControllerInformationRespVO {
|
||||
|
||||
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26526")
|
||||
@ExcelProperty("主键ID")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "远遥的设备IP")
|
||||
@ExcelProperty("远遥的设备IP")
|
||||
private String remoteIp;
|
||||
|
||||
@Schema(description = "AGV编号")
|
||||
@ExcelProperty("AGV编号")
|
||||
private String robotNo;
|
||||
|
||||
@Schema(description = "远遥模式(0:自动模式, 1:手动模式, 2:自由模式)")
|
||||
@ExcelProperty("远遥模式(0:自动模式, 1:手动模式, 2:自由模式)")
|
||||
private Integer remoteMode;
|
||||
|
||||
@Schema(description = "协控(0:关闭协控, 1:开启协控)")
|
||||
@ExcelProperty("协控(0:关闭协控, 1:开启协控)")
|
||||
private Integer collaborativeControl;
|
||||
|
||||
@Schema(description = "远遥的其他信息")
|
||||
@ExcelProperty("远遥的其他信息")
|
||||
private String remoteMsg;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.remote.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
@Schema(description = "管理后台 - 远遥设备信息新增/修改 Request VO")
|
||||
@Data
|
||||
public class RemoteControllerInformationSaveReqVO {
|
||||
|
||||
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26526")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "远遥的设备IP")
|
||||
private String remoteIp;
|
||||
|
||||
@Schema(description = "AGV编号")
|
||||
private String robotNo;
|
||||
|
||||
@Schema(description = "远遥模式(0:自动模式, 1:手动模式, 2:自由模式)")
|
||||
private Integer remoteMode;
|
||||
|
||||
@Schema(description = "协控(0:关闭协控, 1:开启协控)")
|
||||
private Integer collaborativeControl;
|
||||
|
||||
@Schema(description = "远遥的其他信息")
|
||||
private String remoteMsg;
|
||||
|
||||
}
|
@ -31,7 +31,7 @@ import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
|
||||
|
||||
@Tag(name = "管理后台 - 车辆充电记录")
|
||||
@RestController
|
||||
@RequestMapping("/robot/charge-log")
|
||||
@RequestMapping("/system/robot/charge-log")
|
||||
@Validated
|
||||
public class RobotChargeLogController {
|
||||
|
||||
|
@ -0,0 +1,51 @@
|
||||
package cn.iocoder.yudao.module.system.dal.dataobject.remote;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||
|
||||
/**
|
||||
* 远遥设备信息 DO
|
||||
*
|
||||
* @author 陈宾顺
|
||||
*/
|
||||
@TableName("remote_controller_information")
|
||||
@KeySequence("remote_controller_information_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class RemoteControllerInformationDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 远遥的设备IP
|
||||
*/
|
||||
private String remoteIp;
|
||||
/**
|
||||
* AGV编号
|
||||
*/
|
||||
private String robotNo;
|
||||
/**
|
||||
* 远遥模式(0:自动模式, 1:手动模式, 2:自由模式)
|
||||
*/
|
||||
private Integer remoteMode;
|
||||
/**
|
||||
* 协控(0:关闭协控, 1:开启协控)
|
||||
*/
|
||||
private Integer collaborativeControl;
|
||||
/**
|
||||
* 远遥的其他信息
|
||||
*/
|
||||
private String remoteMsg;
|
||||
|
||||
}
|
@ -22,7 +22,7 @@ public class RobotMapStopDO extends BaseDO {
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@TableId
|
||||
@TableId(type = IdType.ASSIGN_ID)
|
||||
private Long id;
|
||||
/**
|
||||
* 急停仓库点位地图表id
|
||||
|
@ -0,0 +1,31 @@
|
||||
package cn.iocoder.yudao.module.system.dal.mysql.remote;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.remote.vo.RemoteControllerInformationPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.remote.RemoteControllerInformationDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 远遥设备信息 Mapper
|
||||
*
|
||||
* @author 陈宾顺
|
||||
*/
|
||||
@Mapper
|
||||
public interface RemoteControllerInformationMapper extends BaseMapperX<RemoteControllerInformationDO> {
|
||||
|
||||
default PageResult<RemoteControllerInformationDO> selectPage(RemoteControllerInformationPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<RemoteControllerInformationDO>()
|
||||
.eqIfPresent(RemoteControllerInformationDO::getRemoteIp, reqVO.getRemoteIp())
|
||||
.eqIfPresent(RemoteControllerInformationDO::getRobotNo, reqVO.getRobotNo())
|
||||
.eqIfPresent(RemoteControllerInformationDO::getRemoteMode, reqVO.getRemoteMode())
|
||||
.eqIfPresent(RemoteControllerInformationDO::getCollaborativeControl, reqVO.getCollaborativeControl())
|
||||
.eqIfPresent(RemoteControllerInformationDO::getRemoteMsg, reqVO.getRemoteMsg())
|
||||
.betweenIfPresent(RemoteControllerInformationDO::getCreateTime, reqVO.getCreateTime())
|
||||
.orderByDesc(RemoteControllerInformationDO::getId));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
package cn.iocoder.yudao.module.system.service.remote;
|
||||
|
||||
import java.util.*;
|
||||
import javax.validation.*;
|
||||
|
||||
import cn.iocoder.yudao.module.system.controller.admin.remote.vo.RemoteControllerInformationPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.remote.vo.RemoteControllerInformationSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.remote.RemoteControllerInformationDO;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
|
||||
/**
|
||||
* 远遥设备信息 Service 接口
|
||||
*
|
||||
* @author 陈宾顺
|
||||
*/
|
||||
public interface RemoteControllerInformationService extends IService<RemoteControllerInformationDO> {
|
||||
|
||||
/**
|
||||
* 创建远遥设备信息
|
||||
*
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Long createControllerInformation(@Valid RemoteControllerInformationSaveReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新远遥设备信息
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updateControllerInformation(@Valid RemoteControllerInformationSaveReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除远遥设备信息
|
||||
*
|
||||
* @param id 编号
|
||||
*/
|
||||
void deleteControllerInformation(Long id);
|
||||
|
||||
/**
|
||||
* 获得远遥设备信息
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 远遥设备信息
|
||||
*/
|
||||
RemoteControllerInformationDO getControllerInformation(Long id);
|
||||
|
||||
/**
|
||||
* 获得远遥设备信息分页
|
||||
*
|
||||
* @param pageReqVO 分页查询
|
||||
* @return 远遥设备信息分页
|
||||
*/
|
||||
PageResult<RemoteControllerInformationDO> getControllerInformationPage(RemoteControllerInformationPageReqVO pageReqVO);
|
||||
|
||||
}
|
@ -0,0 +1,76 @@
|
||||
package cn.iocoder.yudao.module.system.service.remote;
|
||||
|
||||
import cn.iocoder.yudao.module.system.controller.admin.remote.vo.RemoteControllerInformationPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.remote.vo.RemoteControllerInformationSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.remote.RemoteControllerInformationDO;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.remote.RemoteControllerInformationMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.CONTROLLER_INFORMATION_NOT_EXISTS;
|
||||
|
||||
/**
|
||||
* 远遥设备信息 Service 实现类
|
||||
*
|
||||
* @author 陈宾顺
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
public class RemoteControllerInformationServiceImpl extends ServiceImpl<RemoteControllerInformationMapper, RemoteControllerInformationDO> implements RemoteControllerInformationService {
|
||||
|
||||
@Resource
|
||||
private RemoteControllerInformationMapper controllerInformationMapper;
|
||||
|
||||
@Override
|
||||
public Long createControllerInformation(RemoteControllerInformationSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
RemoteControllerInformationDO controllerInformation = BeanUtils.toBean(createReqVO, RemoteControllerInformationDO.class);
|
||||
controllerInformationMapper.insert(controllerInformation);
|
||||
// 返回
|
||||
return controllerInformation.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateControllerInformation(RemoteControllerInformationSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateControllerInformationExists(updateReqVO.getId());
|
||||
// 更新
|
||||
RemoteControllerInformationDO updateObj = BeanUtils.toBean(updateReqVO, RemoteControllerInformationDO.class);
|
||||
controllerInformationMapper.updateById(updateObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteControllerInformation(Long id) {
|
||||
// 校验存在
|
||||
validateControllerInformationExists(id);
|
||||
// 删除
|
||||
controllerInformationMapper.deleteById(id);
|
||||
}
|
||||
|
||||
private void validateControllerInformationExists(Long id) {
|
||||
if (controllerInformationMapper.selectById(id) == null) {
|
||||
throw exception(CONTROLLER_INFORMATION_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public RemoteControllerInformationDO getControllerInformation(Long id) {
|
||||
return controllerInformationMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<RemoteControllerInformationDO> getControllerInformationPage(RemoteControllerInformationPageReqVO pageReqVO) {
|
||||
return controllerInformationMapper.selectPage(pageReqVO);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cn.iocoder.yudao.module.system.dal.mysql.remote.RemoteControllerInformationMapper">
|
||||
|
||||
<!--
|
||||
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
|
||||
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
|
||||
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
|
||||
文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
|
||||
-->
|
||||
|
||||
</mapper>
|
Loading…
Reference in New Issue
Block a user