diff --git a/src/main/resources/mapper/WareHouseLocationDao.xml b/src/main/resources/mapper/WareHouseLocationDao.xml
new file mode 100644
index 000000000..8717dcfea
--- /dev/null
+++ b/src/main/resources/mapper/WareHouseLocationDao.xml
@@ -0,0 +1,425 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java
index b51a838c6..45b6bad7a 100644
--- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java
+++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java
@@ -3,6 +3,7 @@ package cn.iocoder.yudao.framework.common.util.date;
import cn.hutool.core.date.LocalDateTimeUtil;
import java.time.*;
+import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
@@ -27,6 +28,11 @@ public class DateUtils {
public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss";
+ public static String getYearMonthDay() {
+ LocalDate currentDate = LocalDate.now();
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
+ return currentDate.format(formatter);
+ }
/**
* 将 LocalDateTime 转换成 Date
*
diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java
index 2451a6eb8..39f155816 100644
--- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java
+++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java
@@ -185,6 +185,7 @@ public interface ErrorCodeConstants {
// ========== 机器人任务主表 1-002-035-000 ==========
ErrorCode TASK_NOT_EXISTS = new ErrorCode(1-002-035-001, "机器人任务主表不存在");
+ ErrorCode TASK_DATA_NOT_FULL = new ErrorCode(1-002-035-002, "任务数据不完整");
// ========== 机器人任务明细 1-002-036-000 ==========
ErrorCode TASK_DETAIL_NOT_EXISTS = new ErrorCode(1-002-036-001, "机器人任务明细不存在");
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/HouseLocationController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/WareHouseLocationController.java
similarity index 72%
rename from yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/HouseLocationController.java
rename to yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/WareHouseLocationController.java
index 2d238462a..c13fbcbec 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/HouseLocationController.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/WareHouseLocationController.java
@@ -1,9 +1,9 @@
package cn.iocoder.yudao.module.system.controller.admin.houselocation;
-import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.HouseLocationPageReqVO;
-import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.HouseLocationRespVO;
-import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.HouseLocationSaveReqVO;
-import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.HouseLocationDO;
+import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationPageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationSaveReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
import cn.iocoder.yudao.module.system.service.houselocation.HouseLocationService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@@ -13,7 +13,6 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
-import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
@@ -35,7 +34,7 @@ import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
@RestController
@RequestMapping("/system/ware/house-location")
@Validated
-public class HouseLocationController {
+public class WareHouseLocationController {
@Resource
private HouseLocationService houseLocationService;
@@ -43,14 +42,14 @@ public class HouseLocationController {
@PostMapping("/create")
@Operation(summary = "创建库位")
@PreAuthorize("@ss.hasPermission('ware:house-location:create')")
- public CommonResult createHouseLocation(@Valid @RequestBody HouseLocationSaveReqVO createReqVO) {
+ public CommonResult createHouseLocation(@Valid @RequestBody WareHouseLocationSaveReqVO createReqVO) {
return success(houseLocationService.createHouseLocation(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新库位")
@PreAuthorize("@ss.hasPermission('ware:house-location:update')")
- public CommonResult updateHouseLocation(@Valid @RequestBody HouseLocationSaveReqVO updateReqVO) {
+ public CommonResult updateHouseLocation(@Valid @RequestBody WareHouseLocationSaveReqVO updateReqVO) {
houseLocationService.updateHouseLocation(updateReqVO);
return success(true);
}
@@ -68,30 +67,30 @@ public class HouseLocationController {
@Operation(summary = "获得库位")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('ware:house-location:query')")
- public CommonResult getHouseLocation(@RequestParam("id") Long id) {
- HouseLocationDO houseLocation = houseLocationService.getHouseLocation(id);
- return success(BeanUtils.toBean(houseLocation, HouseLocationRespVO.class));
+ public CommonResult getHouseLocation(@RequestParam("id") Long id) {
+ WareHouseLocationDO houseLocation = houseLocationService.getHouseLocation(id);
+ return success(BeanUtils.toBean(houseLocation, WareHouseLocationRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得库位分页")
@PreAuthorize("@ss.hasPermission('ware:house-location:query')")
- public CommonResult> getHouseLocationPage(@Valid HouseLocationPageReqVO pageReqVO) {
- PageResult pageResult = houseLocationService.getHouseLocationPage(pageReqVO);
- return success(BeanUtils.toBean(pageResult, HouseLocationRespVO.class));
+ public CommonResult> getHouseLocationPage(@Valid WareHouseLocationPageReqVO pageReqVO) {
+ PageResult pageResult = houseLocationService.getHouseLocationPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, WareHouseLocationRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出库位 Excel")
@PreAuthorize("@ss.hasPermission('ware:house-location:export')")
@ApiAccessLog(operateType = EXPORT)
- public void exportHouseLocationExcel(@Valid HouseLocationPageReqVO pageReqVO,
+ public void exportHouseLocationExcel(@Valid WareHouseLocationPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
- List list = houseLocationService.getHouseLocationPage(pageReqVO).getList();
+ List list = houseLocationService.getHouseLocationPage(pageReqVO).getList();
// 导出 Excel
- ExcelUtils.write(response, "库位.xls", "数据", HouseLocationRespVO.class,
- BeanUtils.toBean(list, HouseLocationRespVO.class));
+ ExcelUtils.write(response, "库位.xls", "数据", WareHouseLocationRespVO.class,
+ BeanUtils.toBean(list, WareHouseLocationRespVO.class));
}
}
\ No newline at end of file
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/HouseLocationPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/WareHouseLocationPageReqVO.java
similarity index 94%
rename from yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/HouseLocationPageReqVO.java
rename to yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/WareHouseLocationPageReqVO.java
index 9d53966db..7d07c2860 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/HouseLocationPageReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/WareHouseLocationPageReqVO.java
@@ -1,7 +1,6 @@
package cn.iocoder.yudao.module.system.controller.admin.houselocation.vo;
import lombok.*;
-import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import java.math.BigDecimal;
@@ -14,7 +13,7 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
-public class HouseLocationPageReqVO extends PageParam {
+public class WareHouseLocationPageReqVO extends PageParam {
@Schema(description = "巷道/线库id", example = "12101")
private Long laneId;
@@ -89,4 +88,7 @@ public class HouseLocationPageReqVO extends PageParam {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
+ @Schema(description = "排序的位置,越大越优先堆放")
+ private Integer locationNumber;
+
}
\ No newline at end of file
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/HouseLocationRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/WareHouseLocationRespVO.java
similarity index 95%
rename from yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/HouseLocationRespVO.java
rename to yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/WareHouseLocationRespVO.java
index d3301bd70..f5989a17d 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/HouseLocationRespVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/WareHouseLocationRespVO.java
@@ -2,16 +2,15 @@ package cn.iocoder.yudao.module.system.controller.admin.houselocation.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
-import java.util.*;
+
import java.math.BigDecimal;
-import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 库位 Response VO")
@Data
@ExcelIgnoreUnannotated
-public class HouseLocationRespVO {
+public class WareHouseLocationRespVO {
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31832")
@ExcelProperty("主键ID")
@@ -112,4 +111,8 @@ public class HouseLocationRespVO {
@ExcelProperty("创建时间")
private LocalDateTime createTime;
+ @Schema(description = "排序的位置,越大越优先堆放")
+ @ExcelProperty("排序的位置,越大越优先堆放")
+ private Integer locationNumber;
+
}
\ No newline at end of file
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/HouseLocationSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/WareHouseLocationSaveReqVO.java
similarity index 94%
rename from yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/HouseLocationSaveReqVO.java
rename to yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/WareHouseLocationSaveReqVO.java
index eefb716a8..9cc354854 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/HouseLocationSaveReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/WareHouseLocationSaveReqVO.java
@@ -2,13 +2,12 @@ package cn.iocoder.yudao.module.system.controller.admin.houselocation.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
-import java.util.*;
-import javax.validation.constraints.*;
+
import java.math.BigDecimal;
@Schema(description = "管理后台 - 库位新增/修改 Request VO")
@Data
-public class HouseLocationSaveReqVO {
+public class WareHouseLocationSaveReqVO {
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31832")
private Long id;
@@ -82,4 +81,7 @@ public class HouseLocationSaveReqVO {
@Schema(description = "点位类型(0:库位、1:等待点、2:输送线取托盘点、3:出库放托盘点)", example = "2")
private Integer locationType;
+ @Schema(description = "排序的位置,越大越优先堆放")
+ private Integer locationNumber;
+
}
\ No newline at end of file
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/RobotTaskController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/RobotTaskController.java
index 50ecced00..aaa3c9b50 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/RobotTaskController.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/RobotTaskController.java
@@ -44,7 +44,7 @@ public class RobotTaskController {
@PostMapping("/create")
@Operation(summary = "创建机器人任务主表")
@PreAuthorize("@ss.hasPermission('robot:task:create')")
- public CommonResult createTask(@Valid @RequestBody RobotTaskSaveReqVO createReqVO) {
+ public CommonResult createTask(@Valid @RequestBody RobotTaskSaveReqVO createReqVO) throws InterruptedException {
return success(taskService.createTask(createReqVO));
}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotModelPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotModelPageReqVO.java
index de401b4a7..c9f2855a6 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotModelPageReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotModelPageReqVO.java
@@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.system.controller.admin.robot.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -20,6 +21,9 @@ public class RobotModelPageReqVO extends PageParam {
@Schema(description = "车辆类型")
private String robotModelNumber;
+ @Schema(description = "偏移量")
+ private String robotOffset;
+
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotModelRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotModelRespVO.java
index f0bc6610b..6a2433474 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotModelRespVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotModelRespVO.java
@@ -20,6 +20,10 @@ public class RobotModelRespVO {
@ExcelProperty("车辆类型")
private String robotModelNumber;
+ @Schema(description = "偏移量")
+ @ExcelProperty("偏移量")
+ private String robotOffset;
+
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotModelSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotModelSaveReqVO.java
index e4578cf1f..c3dfd0a01 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotModelSaveReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotModelSaveReqVO.java
@@ -16,4 +16,7 @@ public class RobotModelSaveReqVO {
@NotEmpty(message = "车辆类型不能为空")
private String robotModelNumber;
+ @Schema(description = "偏移量")
+ private String robotOffset;
+
}
\ No newline at end of file
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailAddVo.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailAddVo.java
new file mode 100644
index 000000000..e9f57cab2
--- /dev/null
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailAddVo.java
@@ -0,0 +1,42 @@
+package cn.iocoder.yudao.module.system.controller.admin.robot.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+public class RobotTaskDetailAddVo {
+ @Schema(description = "任务类型(1:取放货、2:停车、 3:充电、4:移动、5:仅取货、6:仅放货、7:扫描码、8:检测托盘类型)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+ @NotNull(message = "任务类型(1:取放货、2:停车、 3:充电、4:移动、5:仅取货、6:仅放货、7:扫描码、8:检测托盘类型)不能为空")
+ private Integer taskType;
+
+ @Schema(description = "放货类型(1:库位、2:线库、 3:区域)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+ @NotNull(message = "放货类型(1:库位、2:线库、 3:区域)不能为空")
+ private Integer releaseType;
+
+ @Schema(description = "取货类型(1:库位、2:线库、 3:区域)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @NotNull(message = "取货类型(1:库位、2:线库、 3:区域)不能为空")
+ private Integer takeType;
+
+ @Schema(description = "放货库位/线库/区域", requiredMode = Schema.RequiredMode.REQUIRED, example = "6223")
+ @NotNull(message = "放货库位/线库/区域不能为空")
+ private Long releaseId;
+
+ @Schema(description = "取货库位/线库/区域", requiredMode = Schema.RequiredMode.REQUIRED, example = "24801")
+ @NotNull(message = "取货库位/线库/区域不能为空")
+ private Long takeId;
+
+ @Schema(description = "AGV编号")
+ private String robotNo;
+
+ @Schema(description = "计算后的来源库位编号(前端不用传此字段)")
+ private String fromLocationNo;
+ @Schema(description = "计算后的来源库位id(前端不用传此字段)")
+ private Long fromLocationId;
+ @Schema(description = "计算后的目标库位编号(前端不用传此字段)")
+ private String toLocationNo;
+ @Schema(description = "计算后的目标库位id(前端不用传此字段)")
+ private Long toLocationId;
+}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailPageReqVO.java
index ecbb375c1..3eba16802 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailPageReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailPageReqVO.java
@@ -32,6 +32,15 @@ public class RobotTaskDetailPageReqVO extends PageParam {
@Schema(description = "取货库位/线库/区域", example = "24801")
private Long takeId;
+ @Schema(description = "计算后的来源库位编号")
+ private String fromLocationNo;
+ @Schema(description = "计算后的来源库位id")
+ private Long fromLocationId;
+ @Schema(description = "计算后的目标库位编号")
+ private String toLocationNo;
+ @Schema(description = "计算后的目标库位id")
+ private Long toLocationId;
+
@Schema(description = "AGV编号")
private String robotNo;
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailRespVO.java
index 0c36dc091..b2640fc2f 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailRespVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailRespVO.java
@@ -39,6 +39,17 @@ public class RobotTaskDetailRespVO {
@ExcelProperty("取货库位/线库/区域")
private Long takeId;
+ @Schema(description = "计算后的来源库位编号")
+ @ExcelProperty("计算后的来源库位编号")
+ private String fromLocationNo;
+ @Schema(description = "计算后的来源库位id")
+ private Long fromLocationId;
+ @Schema(description = "计算后的目标库位编号")
+ @ExcelProperty("计算后的目标库位编号")
+ private String toLocationNo;
+ @Schema(description = "计算后的目标库位id")
+ private Long toLocationId;
+
@Schema(description = "AGV编号")
@ExcelProperty("AGV编号")
private String robotNo;
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailSaveReqVO.java
index 8d1562ae3..133da6ca2 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailSaveReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailSaveReqVO.java
@@ -37,6 +37,15 @@ public class RobotTaskDetailSaveReqVO {
@NotNull(message = "取货库位/线库/区域不能为空")
private Long takeId;
+ @Schema(description = "计算后的来源库位编号")
+ private String fromLocationNo;
+ @Schema(description = "计算后的来源库位id")
+ private Long fromLocationId;
+ @Schema(description = "计算后的目标库位编号")
+ private String toLocationNo;
+ @Schema(description = "计算后的目标库位id")
+ private Long toLocationId;
+
@Schema(description = "AGV编号")
private String robotNo;
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskSaveReqVO.java
index b6f9e40e8..8f05b3fa7 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskSaveReqVO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskSaveReqVO.java
@@ -11,9 +11,6 @@ import java.time.LocalDateTime;
@Data
public class RobotTaskSaveReqVO {
- @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15306")
- private Long id;
-
@Schema(description = "是否拼接任务(0:不拼接、1:拼接)", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "是否拼接任务(0:不拼接、1:拼接)不能为空")
private Integer montageTask;
@@ -22,6 +19,9 @@ public class RobotTaskSaveReqVO {
@NotNull(message = "拼接任务数量不能为空")
private Integer montageNumber;
+ @Schema(description = "任务")
+ private List taskDetailList;
+
@Schema(description = "物料信息")
private String skuInfo;
@@ -43,6 +43,10 @@ public class RobotTaskSaveReqVO {
@Schema(description = "是否搬空所选线库/区域(0:不搬空、1:搬空)")
private Long doMoveAll;
+
+ @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15306")
+ private Long id;
+
@Schema(description = "循环次数")
private Long cycleNumber;
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/houselocation/HouseLocationDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/houselocation/WareHouseLocationDO.java
similarity index 87%
rename from yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/houselocation/HouseLocationDO.java
rename to yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/houselocation/WareHouseLocationDO.java
index 7be481edd..754fa8d0b 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/houselocation/HouseLocationDO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/houselocation/WareHouseLocationDO.java
@@ -1,18 +1,9 @@
package cn.iocoder.yudao.module.system.dal.dataobject.houselocation;
-import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
-import java.util.*;
+
import java.math.BigDecimal;
-import java.math.BigDecimal;
-import java.math.BigDecimal;
-import java.math.BigDecimal;
-import java.math.BigDecimal;
-import java.math.BigDecimal;
-import java.math.BigDecimal;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-import java.time.LocalDateTime;
+
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
@@ -29,7 +20,7 @@ import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
@Builder
@NoArgsConstructor
@AllArgsConstructor
-public class HouseLocationDO extends BaseDO {
+public class WareHouseLocationDO extends BaseDO {
/**
* 主键ID
@@ -128,5 +119,9 @@ public class HouseLocationDO extends BaseDO {
* 点位类型(0:库位、1:等待点、2:输送线取托盘点、3:出库放托盘点)
*/
private Integer locationType;
+ /**
+ * 排序的位置,越大越优先堆放
+ */
+ private Integer locationNumber;
}
\ No newline at end of file
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/robot/RobotModelDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/robot/RobotModelDO.java
index 84bca77af..5f5e1c033 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/robot/RobotModelDO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/robot/RobotModelDO.java
@@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
/**
@@ -30,5 +31,9 @@ public class RobotModelDO extends BaseDO {
* 车辆类型
*/
private String robotModelNumber;
+ /**
+ * 偏移量
+ */
+ private String robotOffset;
}
\ No newline at end of file
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/robot/RobotTaskDetailDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/robot/RobotTaskDetailDO.java
index b08ec9164..011d42131 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/robot/RobotTaskDetailDO.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/robot/RobotTaskDetailDO.java
@@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.system.dal.dataobject.robot;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalDateTime;
@@ -51,6 +52,22 @@ public class RobotTaskDetailDO extends BaseDO {
* 取货库位/线库/区域
*/
private Long takeId;
+ /**
+ * 计算后的来源库位编号
+ */
+ private String fromLocationNo;
+ /**
+ * 计算后的来源库位id
+ */
+ private Long fromLocationId;
+ /**
+ * 计算后的目标库位编号
+ */
+ private String toLocationNo;
+ /**
+ * 计算后的目标库位id
+ */
+ private Long toLocationId;
/**
* AGV编号
*/
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/houselocation/HouseLocationMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/houselocation/HouseLocationMapper.java
deleted file mode 100644
index 19793901e..000000000
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/houselocation/HouseLocationMapper.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package cn.iocoder.yudao.module.system.dal.mysql.houselocation;
-
-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.houselocation.vo.HouseLocationPageReqVO;
-import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.HouseLocationDO;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 库位 Mapper
- *
- * @author 陈宾顺
- */
-@Mapper
-public interface HouseLocationMapper extends BaseMapperX {
-
- default PageResult selectPage(HouseLocationPageReqVO reqVO) {
- return selectPage(reqVO, new LambdaQueryWrapperX()
- .eqIfPresent(HouseLocationDO::getLaneId, reqVO.getLaneId())
- .likeIfPresent(HouseLocationDO::getLaneName, reqVO.getLaneName())
- .eqIfPresent(HouseLocationDO::getAreaId, reqVO.getAreaId())
- .likeIfPresent(HouseLocationDO::getAreaName, reqVO.getAreaName())
- .eqIfPresent(HouseLocationDO::getLocationNo, reqVO.getLocationNo())
- .eqIfPresent(HouseLocationDO::getLocationYaw, reqVO.getLocationYaw())
- .likeIfPresent(HouseLocationDO::getGroupName, reqVO.getGroupName())
- .likeIfPresent(HouseLocationDO::getSkuInfo, reqVO.getSkuInfo())
- .likeIfPresent(HouseLocationDO::getSkuBatch, reqVO.getSkuBatch())
- .eqIfPresent(HouseLocationDO::getSkuNumber, reqVO.getSkuNumber())
- .eqIfPresent(HouseLocationDO::getLocationEnable, reqVO.getLocationEnable())
- .eqIfPresent(HouseLocationDO::getLocationLock, reqVO.getLocationLock())
- .eqIfPresent(HouseLocationDO::getLocationUseStatus, reqVO.getLocationUseStatus())
- .eqIfPresent(HouseLocationDO::getLocationX, reqVO.getLocationX())
- .eqIfPresent(HouseLocationDO::getLocationY, reqVO.getLocationY())
- .eqIfPresent(HouseLocationDO::getLocationWide, reqVO.getLocationWide())
- .eqIfPresent(HouseLocationDO::getLocationDeep, reqVO.getLocationDeep())
- .eqIfPresent(HouseLocationDO::getLocationHeight, reqVO.getLocationHeight())
- .eqIfPresent(HouseLocationDO::getLocationDefaultHeight, reqVO.getLocationDefaultHeight())
- .eqIfPresent(HouseLocationDO::getLocationTotalHeight, reqVO.getLocationTotalHeight())
- .eqIfPresent(HouseLocationDO::getLocationTrayHeight, reqVO.getLocationTrayHeight())
- .eqIfPresent(HouseLocationDO::getLocationStorey, reqVO.getLocationStorey())
- .eqIfPresent(HouseLocationDO::getLocationType, reqVO.getLocationType())
- .betweenIfPresent(HouseLocationDO::getCreateTime, reqVO.getCreateTime())
- .orderByDesc(HouseLocationDO::getId));
- }
-
-}
\ No newline at end of file
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/houselocation/WareHouseLocationMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/houselocation/WareHouseLocationMapper.java
new file mode 100644
index 000000000..606b980f8
--- /dev/null
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/houselocation/WareHouseLocationMapper.java
@@ -0,0 +1,56 @@
+package cn.iocoder.yudao.module.system.dal.mysql.houselocation;
+
+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.houselocation.vo.WareHouseLocationPageReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 库位 Mapper
+ *
+ * @author 陈宾顺
+ */
+@Mapper
+public interface WareHouseLocationMapper extends BaseMapperX {
+
+ default PageResult selectPage(WareHouseLocationPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(WareHouseLocationDO::getLaneId, reqVO.getLaneId())
+ .likeIfPresent(WareHouseLocationDO::getLaneName, reqVO.getLaneName())
+ .eqIfPresent(WareHouseLocationDO::getAreaId, reqVO.getAreaId())
+ .likeIfPresent(WareHouseLocationDO::getAreaName, reqVO.getAreaName())
+ .eqIfPresent(WareHouseLocationDO::getLocationNo, reqVO.getLocationNo())
+ .eqIfPresent(WareHouseLocationDO::getLocationYaw, reqVO.getLocationYaw())
+ .likeIfPresent(WareHouseLocationDO::getGroupName, reqVO.getGroupName())
+ .likeIfPresent(WareHouseLocationDO::getSkuInfo, reqVO.getSkuInfo())
+ .likeIfPresent(WareHouseLocationDO::getSkuBatch, reqVO.getSkuBatch())
+ .eqIfPresent(WareHouseLocationDO::getSkuNumber, reqVO.getSkuNumber())
+ .eqIfPresent(WareHouseLocationDO::getLocationEnable, reqVO.getLocationEnable())
+ .eqIfPresent(WareHouseLocationDO::getLocationLock, reqVO.getLocationLock())
+ .eqIfPresent(WareHouseLocationDO::getLocationUseStatus, reqVO.getLocationUseStatus())
+ .eqIfPresent(WareHouseLocationDO::getLocationX, reqVO.getLocationX())
+ .eqIfPresent(WareHouseLocationDO::getLocationY, reqVO.getLocationY())
+ .eqIfPresent(WareHouseLocationDO::getLocationWide, reqVO.getLocationWide())
+ .eqIfPresent(WareHouseLocationDO::getLocationDeep, reqVO.getLocationDeep())
+ .eqIfPresent(WareHouseLocationDO::getLocationHeight, reqVO.getLocationHeight())
+ .eqIfPresent(WareHouseLocationDO::getLocationDefaultHeight, reqVO.getLocationDefaultHeight())
+ .eqIfPresent(WareHouseLocationDO::getLocationTotalHeight, reqVO.getLocationTotalHeight())
+ .eqIfPresent(WareHouseLocationDO::getLocationTrayHeight, reqVO.getLocationTrayHeight())
+ .eqIfPresent(WareHouseLocationDO::getLocationStorey, reqVO.getLocationStorey())
+ .eqIfPresent(WareHouseLocationDO::getLocationType, reqVO.getLocationType())
+ .betweenIfPresent(WareHouseLocationDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(WareHouseLocationDO::getId));
+ }
+
+ /**
+ * 查询空闲的库位id
+ * @param type 类型(1:库位、2:线库、 3:区域)
+ * @param id 库位/线库/区域
+ * @return
+ */
+ Long selectByTypeAndId(@Param("type") Integer type,
+ @Param("id") Long id);
+}
\ No newline at end of file
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/robot/RobotModelMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/robot/RobotModelMapper.java
index 18187ba49..1f8f9c0d6 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/robot/RobotModelMapper.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/robot/RobotModelMapper.java
@@ -18,6 +18,7 @@ public interface RobotModelMapper extends BaseMapperX {
default PageResult selectPage(RobotModelPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX()
.eqIfPresent(RobotModelDO::getRobotModelNumber, reqVO.getRobotModelNumber())
+ .eqIfPresent(RobotModelDO::getRobotOffset, reqVO.getRobotOffset())
.betweenIfPresent(RobotModelDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(RobotModelDO::getId));
}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/robot/RobotTaskDetailMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/robot/RobotTaskDetailMapper.java
index b5c11c089..1f904da3f 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/robot/RobotTaskDetailMapper.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/robot/RobotTaskDetailMapper.java
@@ -23,6 +23,10 @@ public interface RobotTaskDetailMapper extends BaseMapperX {
.eqIfPresent(RobotTaskDetailDO::getTakeType, reqVO.getTakeType())
.eqIfPresent(RobotTaskDetailDO::getReleaseId, reqVO.getReleaseId())
.eqIfPresent(RobotTaskDetailDO::getTakeId, reqVO.getTakeId())
+ .eqIfPresent(RobotTaskDetailDO::getFromLocationId, reqVO.getFromLocationId())
+ .eqIfPresent(RobotTaskDetailDO::getFromLocationNo, reqVO.getFromLocationNo())
+ .eqIfPresent(RobotTaskDetailDO::getToLocationId, reqVO.getToLocationId())
+ .eqIfPresent(RobotTaskDetailDO::getToLocationNo, reqVO.getToLocationNo())
.eqIfPresent(RobotTaskDetailDO::getRobotNo, reqVO.getRobotNo())
.eqIfPresent(RobotTaskDetailDO::getTaskStatus, reqVO.getTaskStatus())
.eqIfPresent(RobotTaskDetailDO::getTaskStage, reqVO.getTaskStage())
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/DeviceInformationType.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/device/DeviceInformationEnum.java
similarity index 79%
rename from yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/DeviceInformationType.java
rename to yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/device/DeviceInformationEnum.java
index 27c4f0c44..9de2ca2b7 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/DeviceInformationType.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/device/DeviceInformationEnum.java
@@ -1,11 +1,11 @@
-package cn.iocoder.yudao.module.system.enums;
+package cn.iocoder.yudao.module.system.enums.device;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
-public enum DeviceInformationType {
+public enum DeviceInformationEnum {
CHARGING_STATION(1, "充电桩"),
Conveyor_line(2, "输送线"),
@@ -23,5 +23,5 @@ public enum DeviceInformationType {
/**
* 说明
*/
- private final String source;
+ private final String msg;
}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/redis/RobotCacheTypeEnum.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/redis/RobotCacheTypeEnum.java
new file mode 100644
index 000000000..2fa6c0f41
--- /dev/null
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/redis/RobotCacheTypeEnum.java
@@ -0,0 +1,23 @@
+package cn.iocoder.yudao.module.system.enums.redis;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum RobotCacheTypeEnum {
+
+ TASK_NO("task:robot:no", "任务号"),
+ ROBOT_TASK_ADD_LOCK("robot:task:add:lock", "所有下发创建机器人任务的锁"),
+ ROBOT_TASK_LOCATION_LOCK("robot:task:location:lock", "库位取/放任务下发互斥锁(仅仅锁某个库位)"),
+ ROBOT_TASK_LANE_LOCK("robot:task:lane:lock", "线库/巷道, 取/放任务下发互斥锁(仅仅锁某个线库/巷道)"),
+ ROBOT_TASK_AREA_LOCK("robot:task:area:lock", "库区, 取/放任务下发互斥锁(仅仅锁某个库区)");
+ /**
+ * 类型
+ */
+ private final String key;
+ /**
+ * 说明
+ */
+ private final String msg;
+}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/ReleaseTakeEnum.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/ReleaseTakeEnum.java
new file mode 100644
index 000000000..7fc8b6e01
--- /dev/null
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/ReleaseTakeEnum.java
@@ -0,0 +1,25 @@
+package cn.iocoder.yudao.module.system.enums.robot;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 放货类型
+ */
+@Getter
+@AllArgsConstructor
+public enum ReleaseTakeEnum {
+
+ TO_LOCATION(1, "库位"),
+ TO_LANE(2, "线库"),
+ TO_AREA(3, "区域");
+
+ /**
+ * 类型
+ */
+ private final Integer type;
+ /**
+ * 说明
+ */
+ private final String msg;
+}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselocation/HouseLocationService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselocation/HouseLocationService.java
index 373116661..08f94ef7c 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselocation/HouseLocationService.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselocation/HouseLocationService.java
@@ -1,11 +1,10 @@
package cn.iocoder.yudao.module.system.service.houselocation;
-import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.HouseLocationPageReqVO;
-import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.HouseLocationSaveReqVO;
-import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.HouseLocationDO;
+import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationPageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationSaveReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
/**
* 库位 Service 接口
@@ -20,14 +19,14 @@ public interface HouseLocationService {
* @param createReqVO 创建信息
* @return 编号
*/
- Long createHouseLocation(@Valid HouseLocationSaveReqVO createReqVO);
+ Long createHouseLocation(@Valid WareHouseLocationSaveReqVO createReqVO);
/**
* 更新库位
*
* @param updateReqVO 更新信息
*/
- void updateHouseLocation(@Valid HouseLocationSaveReqVO updateReqVO);
+ void updateHouseLocation(@Valid WareHouseLocationSaveReqVO updateReqVO);
/**
* 删除库位
@@ -42,7 +41,7 @@ public interface HouseLocationService {
* @param id 编号
* @return 库位
*/
- HouseLocationDO getHouseLocation(Long id);
+ WareHouseLocationDO getHouseLocation(Long id);
/**
* 获得库位分页
@@ -50,6 +49,6 @@ public interface HouseLocationService {
* @param pageReqVO 分页查询
* @return 库位分页
*/
- PageResult getHouseLocationPage(HouseLocationPageReqVO pageReqVO);
+ PageResult getHouseLocationPage(WareHouseLocationPageReqVO pageReqVO);
}
\ No newline at end of file
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselocation/HouseLocationServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselocation/HouseLocationServiceImpl.java
index 53e5c00ec..2ff652886 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselocation/HouseLocationServiceImpl.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselocation/HouseLocationServiceImpl.java
@@ -1,14 +1,13 @@
package cn.iocoder.yudao.module.system.service.houselocation;
-import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.HouseLocationPageReqVO;
-import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.HouseLocationSaveReqVO;
-import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.HouseLocationDO;
-import cn.iocoder.yudao.module.system.dal.mysql.houselocation.HouseLocationMapper;
+import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationPageReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationSaveReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
+import cn.iocoder.yudao.module.system.dal.mysql.houselocation.WareHouseLocationMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
-import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
@@ -26,23 +25,23 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.HOUSE_LOCA
public class HouseLocationServiceImpl implements HouseLocationService {
@Resource
- private HouseLocationMapper houseLocationMapper;
+ private WareHouseLocationMapper houseLocationMapper;
@Override
- public Long createHouseLocation(HouseLocationSaveReqVO createReqVO) {
+ public Long createHouseLocation(WareHouseLocationSaveReqVO createReqVO) {
// 插入
- HouseLocationDO houseLocation = BeanUtils.toBean(createReqVO, HouseLocationDO.class);
+ WareHouseLocationDO houseLocation = BeanUtils.toBean(createReqVO, WareHouseLocationDO.class);
houseLocationMapper.insert(houseLocation);
// 返回
return houseLocation.getId();
}
@Override
- public void updateHouseLocation(HouseLocationSaveReqVO updateReqVO) {
+ public void updateHouseLocation(WareHouseLocationSaveReqVO updateReqVO) {
// 校验存在
validateHouseLocationExists(updateReqVO.getId());
// 更新
- HouseLocationDO updateObj = BeanUtils.toBean(updateReqVO, HouseLocationDO.class);
+ WareHouseLocationDO updateObj = BeanUtils.toBean(updateReqVO, WareHouseLocationDO.class);
houseLocationMapper.updateById(updateObj);
}
@@ -61,12 +60,12 @@ public class HouseLocationServiceImpl implements HouseLocationService {
}
@Override
- public HouseLocationDO getHouseLocation(Long id) {
+ public WareHouseLocationDO getHouseLocation(Long id) {
return houseLocationMapper.selectById(id);
}
@Override
- public PageResult getHouseLocationPage(HouseLocationPageReqVO pageReqVO) {
+ public PageResult getHouseLocationPage(WareHouseLocationPageReqVO pageReqVO) {
return houseLocationMapper.selectPage(pageReqVO);
}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationServiceImpl.java
index 9d7a40583..49569f01c 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationServiceImpl.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationServiceImpl.java
@@ -6,7 +6,7 @@ import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInfo
import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.information.DeviceInformationDO;
import cn.iocoder.yudao.module.system.dal.mysql.information.DeviceInformationMapper;
-import cn.iocoder.yudao.module.system.enums.DeviceInformationType;
+import cn.iocoder.yudao.module.system.enums.device.DeviceInformationEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -46,11 +46,11 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
throw exception(INFORMATION_MAC_EXIST);
}
//AGV需要判断机车是否接收到此Mac地址
- if(DeviceInformationType.PALLETIZER.getType().equals(createReqVO.getDeviceType())
+ if(DeviceInformationEnum.PALLETIZER.getType().equals(createReqVO.getDeviceType())
&& ObjectUtil.isEmpty(createReqVO.getMacAddress())){
throw exception(INFORMATION_MAC_INPUT);
}
- if(DeviceInformationType.PALLETIZER.getType().equals(createReqVO.getDeviceType())){
+ if(DeviceInformationEnum.PALLETIZER.getType().equals(createReqVO.getDeviceType())){
// String jiCheResponse = grpcServiceApi.robotExecption();
}
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskService.java
index 9c94c7462..60430edc3 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskService.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskService.java
@@ -21,7 +21,7 @@ public interface RobotTaskService {
* @param createReqVO 创建信息
* @return 编号
*/
- Long createTask(@Valid RobotTaskSaveReqVO createReqVO);
+ Long createTask(@Valid RobotTaskSaveReqVO createReqVO) throws InterruptedException;
/**
* 更新机器人任务主表
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskServiceImpl.java
index da7915c6f..021e7e85a 100644
--- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskServiceImpl.java
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/robot/RobotTaskServiceImpl.java
@@ -1,42 +1,139 @@
package cn.iocoder.yudao.module.system.service.robot;
+import cn.hutool.core.util.ObjectUtil;
+import cn.iocoder.yudao.framework.common.util.date.DateUtils;
+import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskDetailAddVo;
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotTaskSaveReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDO;
+import cn.iocoder.yudao.module.system.dal.mysql.houselocation.WareHouseLocationMapper;
import cn.iocoder.yudao.module.system.dal.mysql.robot.RobotTaskMapper;
+import cn.iocoder.yudao.module.system.enums.redis.RobotCacheTypeEnum;
+import cn.iocoder.yudao.module.system.enums.robot.ReleaseTakeEnum;
+import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
+import cn.iocoder.yudao.module.system.util.redis.RedissonUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.redisson.api.RLock;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
-import org.springframework.validation.annotation.Validated;
+
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
import java.util.*;
+import java.util.concurrent.TimeUnit;
+
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 static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.TASK_NOT_EXISTS;
+import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
/**
* 机器人任务主表 Service 实现类
*
* @author 陈宾顺
*/
+@Slf4j
@Service
@Validated
public class RobotTaskServiceImpl implements RobotTaskService {
+ private final String RESULT = "SUCCESS";
+
@Resource
private RobotTaskMapper taskMapper;
+ @Resource
+ private WareHouseLocationMapper locationMapper;
+
+ @Resource
+ private RedisUtil redisUtil;
+
+ @Resource
+ private RedissonUtils redissonUtils;
+
+ @Value("${zn.task-no}")
+ private String taskNo;
+
@Override
- public Long createTask(RobotTaskSaveReqVO createReqVO) {
+ @Transactional(rollbackFor = Exception.class)
+ public Long createTask(RobotTaskSaveReqVO createReqVO) throws InterruptedException {
+ if (ObjectUtil.isEmpty(createReqVO.getTaskDetailList())) {
+ throw exception(TASK_DATA_NOT_FULL);
+ }
+ //获取库位id
+ RLock lock = redissonUtils.getLock(RobotCacheTypeEnum.ROBOT_TASK_ADD_LOCK.getKey());
+
+ String addResult = "";
+ if (lock.tryLock(15l,TimeUnit.MINUTES)){
+ try {
+ addResult = addTask(createReqVO);
+ } catch (Exception e) {
+ log.info("下发任务出现异常 :{}",e);
+ } finally {
+ lock.unlock();
+ }
+ }else {
+ throw new RuntimeException("有正在下发中的任务请稍后重试!");
+ }
+
+ if (!RESULT.equals(addResult)) {
+ throw new RuntimeException(addResult);
+ }
+
+ return 1l;
+ }
+
+ /**
+ * 添加任务
+ * @param createReqVO
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public String addTask(RobotTaskSaveReqVO createReqVO) {
+ //设置任务号
+ if (ObjectUtil.isEmpty(createReqVO.getTaskNo())) {
+ String incrementByKey = redisUtil.getIncrementByKey(RobotCacheTypeEnum.TASK_NO.getKey());
+ createReqVO.setTaskNo(taskNo+ DateUtils.getYearMonthDay()+incrementByKey);
+ }
+ //查找库位
+
// 插入
RobotTaskDO task = BeanUtils.toBean(createReqVO, RobotTaskDO.class);
taskMapper.insert(task);
- // 返回
- return task.getId();
+ return RESULT;
+ }
+
+ /**
+ * 设置放货和取货的id
+ * @param taskDetailList
+ * @return
+ */
+ public void setLocationIdNo(List taskDetailList){
+ List locationIds = new ArrayList<>();
+ for (RobotTaskDetailAddVo robotTaskVo : taskDetailList) {
+ if (ReleaseTakeEnum.TO_LOCATION.getType().equals(robotTaskVo.getReleaseType())) {
+ WareHouseLocationDO locationDO = locationMapper.selectById(robotTaskVo.getReleaseId());
+ robotTaskVo.setToLocationNo(locationDO.getLocationNo());
+ robotTaskVo.setToLocationId(robotTaskVo.getReleaseId());
+ locationIds.add(robotTaskVo.getReleaseId());
+ } else {
+
+ }
+ //库位
+ Long releaseId = locationMapper.selectByTypeAndId(robotTaskVo.getReleaseType(),robotTaskVo.getReleaseId());
+ if (ObjectUtil.isEmpty(releaseId)) {
+ throw new RuntimeException("放货库位为空或者已锁定 "+ robotTaskVo.getReleaseId());
+ }
+
+ Long takeId = locationMapper.selectByTypeAndId(robotTaskVo.getTakeType(),robotTaskVo.getTakeId());
+ if (ObjectUtil.isEmpty(takeId)) {
+ throw new RuntimeException("取货库位为空或者已锁定 "+ robotTaskVo.getTakeId());
+ }
+ }
}
@Override
diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/util/redis/RedisUtil.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/util/redis/RedisUtil.java
new file mode 100644
index 000000000..d7752cca9
--- /dev/null
+++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/util/redis/RedisUtil.java
@@ -0,0 +1,568 @@
+package cn.iocoder.yudao.module.system.util.redis;
+
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+@Component
+public final class RedisUtil {
+
+ @Resource
+ private RedisTemplate redisTemplate;
+
+ /**
+ * 获取自增
+ * @param key
+ * @return
+ */
+ public String getIncrementByKey( String key) {
+ Long autoID = redisTemplate.opsForValue().increment(key, 1);
+ // 设置key过期时间, 保证每天的流水号从1开始
+ if (autoID == 1) {
+ // 获取当前时间
+ DateTime now = DateUtil.date();
+ // 获取明天的时间
+ String tomorrowZero = DateUtil.format(DateUtil.tomorrow(), DatePattern.NORM_DATE_PATTERN);
+ DateTime tomorrowZeroDate = DateUtil.parse(tomorrowZero);
+ // 计算两个时间的秒数,作为当天的key的失效时间
+ long timeOut = DateUtil.between(now, tomorrowZeroDate, DateUnit.SECOND);
+ // 设置过期时间
+ redisTemplate.expire(key, timeOut, TimeUnit.SECONDS);
+ }
+ return String.format("%06d", autoID);
+ }
+
+ public Set keys(String keys){
+ try {
+ return redisTemplate.keys(keys);
+ }catch (Exception e){
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ /**
+ * 指定缓存失效时间
+ * @param key 键
+ * @param time 时间(秒)
+ * @return
+ */
+ public boolean expire(String key, long time) {
+ try {
+ if (time > 0) {
+ redisTemplate.expire(key, time, TimeUnit.SECONDS);
+ }
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+ /**
+ * 根据key 获取过期时间
+ * @param key 键 不能为null
+ * @return 时间(秒) 返回0代表为永久有效
+ */
+ public long getExpire(String key) {
+ return redisTemplate.getExpire(key, TimeUnit.SECONDS);
+ }
+ /**
+ * 判断key是否存在
+ * @param key 键
+ * @return true 存在 false不存在
+ */
+ public boolean hasKey(String key) {
+ try {
+ return redisTemplate.hasKey(key);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+ /**
+ * 删除缓存
+ * @param key 可以传一个值 或多个
+ */
+ @SuppressWarnings("unchecked")
+ public void del(String... key) {
+ if (key != null && key.length > 0) {
+ if (key.length == 1) {
+ redisTemplate.delete(key[0]);
+ } else {
+ redisTemplate.delete((Collection) CollectionUtils.arrayToList(key));
+ }
+ }
+ }
+ /**
+ * 普通缓存获取
+ * @param key 键
+ * @return 值
+ */
+ public Object get(String key) {
+ return key == null ? null : redisTemplate.opsForValue().get(key);
+ }
+ /**
+ * 普通缓存放入
+ * @param key 键
+ * @param value 值
+ * @return true成功 false失败
+ */
+ public boolean set(String key, Object value) {
+ try {
+ redisTemplate.opsForValue().set(key, value);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+ /**
+ * 普通缓存放入, 不存在放入,存在返回
+ * @param key 键
+ * @param value 值
+ * @return true成功 false失败
+ */
+ public boolean setnx(String key, Object value) {
+ try {
+ redisTemplate.opsForValue().setIfAbsent(key,value);
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+ /**
+ * 普通缓存放入并设置时间
+ * @param key 键
+ * @param value 值
+ * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期
+ * @return true成功 false 失败
+ */
+ public boolean set(String key, Object value, long time) {
+ try {
+ if (time > 0) {
+ redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
+ } else {
+ set(key, value);
+ }
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ /**
+ * 普通缓存放入并设置时间,不存在放入,存在返回
+ * @param key 键
+ * @param value 值
+ * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期
+ * @return true成功 false 失败
+ */
+ public boolean setnx(String key, Object value, long time) {
+ try {
+ if (time > 0) {
+ redisTemplate.opsForValue().setIfAbsent(key, value, time, TimeUnit.SECONDS);
+ } else {
+ set(key, value);
+ }
+ return true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ /**
+ * 递增
+ * @param key 键
+ * @param delta 要增加几(大于0)
+ * @return
+ */
+ public long incr(String key, long delta) {
+ if (delta < 0) {
+ throw new RuntimeException("递增因子必须大于0");
+ }
+ return redisTemplate.opsForValue().increment(key, delta);
+ }
+ /**
+ * 递减
+ * @param key 键
+ * @param delta 要减少几(小于0)
+ * @return
+ */
+ public long decr(String key, long delta) {
+ if (delta < 0) {
+ throw new RuntimeException("递减因子必须大于0");
+ }
+ return redisTemplate.opsForValue().increment(key, -delta);
+ }
+ /**
+ * HashGet
+ * @param key 键 不能为null
+ * @param item 项 不能为null
+ * @return 值
+ */
+ public Object hget(String key, String item) {
+ return redisTemplate.opsForHash().get(key, item);
+ }
+ /**
+ * 获取hashKey对应的所有键值
+ * @param key 键
+ * @return 对应的多个键值
+ */
+ public Map