From 9fe8245ed52686afd22ab5720c11c06a0a45369b Mon Sep 17 00:00:00 2001 From: cbs <18617195505@163.com> Date: Wed, 8 Jan 2025 10:46:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8B=E5=8F=91=E6=90=AC=E8=BF=90=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/mapper/WareHouseLocationDao.xml | 425 +++++++++++++ .../framework/common/util/date/DateUtils.java | 6 + .../system/enums/ErrorCodeConstants.java | 1 + ....java => WareHouseLocationController.java} | 35 +- ...O.java => WareHouseLocationPageReqVO.java} | 6 +- ...spVO.java => WareHouseLocationRespVO.java} | 9 +- ...O.java => WareHouseLocationSaveReqVO.java} | 8 +- .../admin/robot/RobotTaskController.java | 2 +- .../admin/robot/vo/RobotModelPageReqVO.java | 4 + .../admin/robot/vo/RobotModelRespVO.java | 4 + .../admin/robot/vo/RobotModelSaveReqVO.java | 3 + .../admin/robot/vo/RobotTaskDetailAddVo.java | 42 ++ .../robot/vo/RobotTaskDetailPageReqVO.java | 9 + .../admin/robot/vo/RobotTaskDetailRespVO.java | 11 + .../robot/vo/RobotTaskDetailSaveReqVO.java | 9 + .../admin/robot/vo/RobotTaskSaveReqVO.java | 10 +- ...cationDO.java => WareHouseLocationDO.java} | 19 +- .../dal/dataobject/robot/RobotModelDO.java | 5 + .../dataobject/robot/RobotTaskDetailDO.java | 17 + .../houselocation/HouseLocationMapper.java | 49 -- .../WareHouseLocationMapper.java | 56 ++ .../dal/mysql/robot/RobotModelMapper.java | 1 + .../mysql/robot/RobotTaskDetailMapper.java | 4 + .../DeviceInformationEnum.java} | 6 +- .../enums/redis/RobotCacheTypeEnum.java | 23 + .../system/enums/robot/ReleaseTakeEnum.java | 25 + .../houselocation/HouseLocationService.java | 15 +- .../HouseLocationServiceImpl.java | 23 +- .../DeviceInformationServiceImpl.java | 6 +- .../service/robot/RobotTaskService.java | 2 +- .../service/robot/RobotTaskServiceImpl.java | 109 +++- .../module/system/util/redis/RedisUtil.java | 568 ++++++++++++++++++ .../system/util/redis/RedissonUtils.java | 31 + .../src/main/resources/application.yaml | 3 + .../houselocation/HouseLocationMapper.xml | 12 - .../houselocation/WareHouseLocationMapper.xml | 38 ++ 36 files changed, 1460 insertions(+), 136 deletions(-) create mode 100644 src/main/resources/mapper/WareHouseLocationDao.xml rename yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/{HouseLocationController.java => WareHouseLocationController.java} (72%) rename yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/{HouseLocationPageReqVO.java => WareHouseLocationPageReqVO.java} (94%) rename yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/{HouseLocationRespVO.java => WareHouseLocationRespVO.java} (95%) rename yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/houselocation/vo/{HouseLocationSaveReqVO.java => WareHouseLocationSaveReqVO.java} (94%) create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/robot/vo/RobotTaskDetailAddVo.java rename yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/houselocation/{HouseLocationDO.java => WareHouseLocationDO.java} (87%) delete mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/houselocation/HouseLocationMapper.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/houselocation/WareHouseLocationMapper.java rename yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/{DeviceInformationType.java => device/DeviceInformationEnum.java} (79%) create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/redis/RobotCacheTypeEnum.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/robot/ReleaseTakeEnum.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/util/redis/RedisUtil.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/util/redis/RedissonUtils.java delete mode 100644 yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/houselocation/HouseLocationMapper.xml create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/houselocation/WareHouseLocationMapper.xml 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select count(1) + from ware_house_location + + + and id = #{id} + + + and lane_id = #{laneId} + + + and lane_name = #{laneName} + + + and area_id = #{areaId} + + + and area_name = #{areaName} + + + and location_no = #{locationNo} + + + and location_yaw = #{locationYaw} + + + and group_name = #{groupName} + + + and sku_info = #{skuInfo} + + + and sku_batch = #{skuBatch} + + + and sku_number = #{skuNumber} + + + and tray_info = #{trayInfo} + + + and location_enable = #{locationEnable} + + + and location_lock = #{locationLock} + + + and location_use_status = #{locationUseStatus} + + + and location_x = #{locationX} + + + and location_y = #{locationY} + + + and location_wide = #{locationWide} + + + and location_deep = #{locationDeep} + + + and location_height = #{locationHeight} + + + and location_default_height = #{locationDefaultHeight} + + + and location_total_height = #{locationTotalHeight} + + + and location_tray_height = #{locationTrayHeight} + + + and location_storey = #{locationStorey} + + + and location_type = #{locationType} + + + and location_number = #{locationNumber} + + + and creator = #{creator} + + + and create_time = #{createTime} + + + and updater = #{updater} + + + and update_time = #{updateTime} + + + and deleted = #{deleted} + + + and tenant_id = #{tenantId} + + + + + + + insert into ware_house_location(lane_id, lane_name, area_id, area_name, location_no, location_yaw, group_name, sku_info, sku_batch, sku_number, tray_info, location_enable, location_lock, location_use_status, location_x, location_y, location_wide, location_deep, location_height, location_default_height, location_total_height, location_tray_height, location_storey, location_type, location_number, creator, create_time, updater, update_time, deleted, tenant_id) + values (#{laneId}, #{laneName}, #{areaId}, #{areaName}, #{locationNo}, #{locationYaw}, #{groupName}, #{skuInfo}, #{skuBatch}, #{skuNumber}, #{trayInfo}, #{locationEnable}, #{locationLock}, #{locationUseStatus}, #{locationX}, #{locationY}, #{locationWide}, #{locationDeep}, #{locationHeight}, #{locationDefaultHeight}, #{locationTotalHeight}, #{locationTrayHeight}, #{locationStorey}, #{locationType}, #{locationNumber}, #{creator}, #{createTime}, #{updater}, #{updateTime}, #{deleted}, #{tenantId}) + + + + insert into ware_house_location(lane_id, lane_name, area_id, area_name, location_no, location_yaw, group_name, sku_info, sku_batch, sku_number, tray_info, location_enable, location_lock, location_use_status, location_x, location_y, location_wide, location_deep, location_height, location_default_height, location_total_height, location_tray_height, location_storey, location_type, location_number, creator, create_time, updater, update_time, deleted, tenant_id) + values + + (#{entity.laneId}, #{entity.laneName}, #{entity.areaId}, #{entity.areaName}, #{entity.locationNo}, #{entity.locationYaw}, #{entity.groupName}, #{entity.skuInfo}, #{entity.skuBatch}, #{entity.skuNumber}, #{entity.trayInfo}, #{entity.locationEnable}, #{entity.locationLock}, #{entity.locationUseStatus}, #{entity.locationX}, #{entity.locationY}, #{entity.locationWide}, #{entity.locationDeep}, #{entity.locationHeight}, #{entity.locationDefaultHeight}, #{entity.locationTotalHeight}, #{entity.locationTrayHeight}, #{entity.locationStorey}, #{entity.locationType}, #{entity.locationNumber}, #{entity.creator}, #{entity.createTime}, #{entity.updater}, #{entity.updateTime}, #{entity.deleted}, #{entity.tenantId}) + + + + + insert into ware_house_location(lane_id, lane_name, area_id, area_name, location_no, location_yaw, group_name, sku_info, sku_batch, sku_number, tray_info, location_enable, location_lock, location_use_status, location_x, location_y, location_wide, location_deep, location_height, location_default_height, location_total_height, location_tray_height, location_storey, location_type, location_number, creator, create_time, updater, update_time, deleted, tenant_id) + values + + (#{entity.laneId}, #{entity.laneName}, #{entity.areaId}, #{entity.areaName}, #{entity.locationNo}, #{entity.locationYaw}, #{entity.groupName}, #{entity.skuInfo}, #{entity.skuBatch}, #{entity.skuNumber}, #{entity.trayInfo}, #{entity.locationEnable}, #{entity.locationLock}, #{entity.locationUseStatus}, #{entity.locationX}, #{entity.locationY}, #{entity.locationWide}, #{entity.locationDeep}, #{entity.locationHeight}, #{entity.locationDefaultHeight}, #{entity.locationTotalHeight}, #{entity.locationTrayHeight}, #{entity.locationStorey}, #{entity.locationType}, #{entity.locationNumber}, #{entity.creator}, #{entity.createTime}, #{entity.updater}, #{entity.updateTime}, #{entity.deleted}, #{entity.tenantId}) + + on duplicate key update +lane_id = values(lane_id), +lane_name = values(lane_name), +area_id = values(area_id), +area_name = values(area_name), +location_no = values(location_no), +location_yaw = values(location_yaw), +group_name = values(group_name), +sku_info = values(sku_info), +sku_batch = values(sku_batch), +sku_number = values(sku_number), +tray_info = values(tray_info), +location_enable = values(location_enable), +location_lock = values(location_lock), +location_use_status = values(location_use_status), +location_x = values(location_x), +location_y = values(location_y), +location_wide = values(location_wide), +location_deep = values(location_deep), +location_height = values(location_height), +location_default_height = values(location_default_height), +location_total_height = values(location_total_height), +location_tray_height = values(location_tray_height), +location_storey = values(location_storey), +location_type = values(location_type), +location_number = values(location_number), +creator = values(creator), +create_time = values(create_time), +updater = values(updater), +update_time = values(update_time), +deleted = values(deleted), +tenant_id = values(tenant_id) + + + + + update ware_house_location + + + lane_id = #{laneId}, + + + lane_name = #{laneName}, + + + area_id = #{areaId}, + + + area_name = #{areaName}, + + + location_no = #{locationNo}, + + + location_yaw = #{locationYaw}, + + + group_name = #{groupName}, + + + sku_info = #{skuInfo}, + + + sku_batch = #{skuBatch}, + + + sku_number = #{skuNumber}, + + + tray_info = #{trayInfo}, + + + location_enable = #{locationEnable}, + + + location_lock = #{locationLock}, + + + location_use_status = #{locationUseStatus}, + + + location_x = #{locationX}, + + + location_y = #{locationY}, + + + location_wide = #{locationWide}, + + + location_deep = #{locationDeep}, + + + location_height = #{locationHeight}, + + + location_default_height = #{locationDefaultHeight}, + + + location_total_height = #{locationTotalHeight}, + + + location_tray_height = #{locationTrayHeight}, + + + location_storey = #{locationStorey}, + + + location_type = #{locationType}, + + + location_number = #{locationNumber}, + + + creator = #{creator}, + + + create_time = #{createTime}, + + + updater = #{updater}, + + + update_time = #{updateTime}, + + + deleted = #{deleted}, + + + tenant_id = #{tenantId}, + + + where id = #{id} + + + + + delete from ware_house_location where id = #{id} + + + + 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 hmget(String key) { + return redisTemplate.opsForHash().entries(key); + } + /** + * HashSet + * @param key 键 + * @param map 对应多个键值 + * @return true 成功 false 失败 + */ + public boolean hmset(String key, Map map) { + try { + redisTemplate.opsForHash().putAll(key, map); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + /** + * HashSet 并设置时间 + * @param key 键 + * @param map 对应多个键值 + * @param time 时间(秒) + * @return true成功 false失败 + */ + public boolean hmset(String key, Map map, long time) { + try { + redisTemplate.opsForHash().putAll(key, map); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + /** + * 向一张hash表中放入数据,如果不存在将创建 + * @param key 键 + * @param item 项 + * @param value 值 + * @return true 成功 false失败 + */ + public boolean hset(String key, String item, Object value) { + try { + redisTemplate.opsForHash().put(key, item, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + /** + * 向一张hash表中放入数据,如果不存在将创建 + * @param key 键 + * @param item 项 + * @param value 值 + * @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间 + * @return true 成功 false失败 + */ + public boolean hset(String key, String item, Object value, long time) { + try { + redisTemplate.opsForHash().put(key, item, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + /** + * 删除hash表中的值 + * @param key 键 不能为null + * @param item 项 可以使多个 不能为null + */ + public void hdel(String key, Object... item) { + redisTemplate.opsForHash().delete(key, item); + } + /** + * 判断hash表中是否有该项的值 + * @param key 键 不能为null + * @param item 项 不能为null + * @return true 存在 false不存在 + */ + public boolean hHasKey(String key, String item) { + return redisTemplate.opsForHash().hasKey(key, item); + } + /** + * hash递增 如果不存在,就会创建一个 并把新增后的值返回 + * @param key 键 + * @param item 项 + * @param by 要增加几(大于0) + * @return + */ + public double hincr(String key, String item, double by) { + return redisTemplate.opsForHash().increment(key, item, by); + } + /** + * hash递减 + * @param key 键 + * @param item 项 + * @param by 要减少记(小于0) + * @return + */ + public double hdecr(String key, String item, double by) { + return redisTemplate.opsForHash().increment(key, item, -by); + } + /** + * 根据key获取Set中的所有值 + * @param key 键 + * @return + */ + public Set sGet(String key) { + try { + return redisTemplate.opsForSet().members(key); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + /** + * 根据value从一个set中查询,是否存在 + * @param key 键 + * @param value 值 + * @return true 存在 false不存在 + */ + public boolean sHasKey(String key, Object value) { + try { + return redisTemplate.opsForSet().isMember(key, value); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + /** + * 将数据放入set缓存 + * @param key 键 + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sSet(String key, Object... values) { + try { + return redisTemplate.opsForSet().add(key, values); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + /** + * 将set数据放入缓存 + * @param key 键 + * @param time 时间(秒) + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sSetAndTime(String key, long time, Object... values) { + try { + Long count = redisTemplate.opsForSet().add(key, values); + if (time > 0){ + expire(key, time); + } + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + /** + * 获取set缓存的长度 + * @param key 键 + * @return + */ + public long sGetSetSize(String key) { + try { + return redisTemplate.opsForSet().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + /** + * 移除值为value的 + * @param key 键 + * @param values 值 可以是多个 + * @return 移除的个数 + */ + public long setRemove(String key, Object... values) { + try { + Long count = redisTemplate.opsForSet().remove(key, values); + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + // ===============================list================================= + /** + * 获取list缓存的内容 + * @param key 键 + * @param start 开始 + * @param end 结束 0 到 -1代表所有值 + * @return + */ + public List lGet(String key, long start, long end) { + try { + return redisTemplate.opsForList().range(key, start, end); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + /** + * 获取list缓存的长度 + * @param key 键 + * @return + */ + public long lGetListSize(String key) { + try { + return redisTemplate.opsForList().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + /** + * 通过索引 获取list中的值 + * @param key 键 + * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推 + * @return + */ + public Object lGetIndex(String key, long index) { + try { + return redisTemplate.opsForList().index(key, index); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + /** + * 将list放入缓存 + * @param key 键 + * @param value 值 + * @return + */ + public boolean lSet(String key, Object value) { + try { + redisTemplate.opsForList().rightPush(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + /** + * 将list放入缓存 + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, Object value, long time) { + try { + redisTemplate.opsForList().rightPush(key, value); + if (time > 0){ + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + /** + * 将list放入缓存 + * @param key 键 + * @param value 值 + * @return + */ + public boolean lSet(String key, List value) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, List value, long time) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + if (time > 0){ + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + /** + * 根据索引修改list中的某条数据 + * @param key 键 + * @param index 索引 + * @param value 值 + * @return + */ + public boolean lUpdateIndex(String key, long index, Object value) { + try { + redisTemplate.opsForList().set(key, index, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + /** + * 移除N个值为value + * @param key 键 + * @param count 移除多少个 + * @param value 值 + * @return 移除的个数 + */ + public long lRemove(String key, long count, Object value) { + try { + Long remove = redisTemplate.opsForList().remove(key, count, value); + return remove; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } +} + diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/util/redis/RedissonUtils.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/util/redis/RedissonUtils.java new file mode 100644 index 000000000..f93fb314e --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/util/redis/RedissonUtils.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.system.util.redis; + +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Set; + +@Component +public class RedissonUtils { + + @Resource + private RedissonClient redissonClient; + + /** + * 获取redisson锁 + * @param keys 同时锁多个key + * @return + */ + public RLock getLocks(Set keys){ + RLock[] lockArray = keys.stream().map(key -> redissonClient.getLock(key)).toArray(RLock[]::new); + return redissonClient.getMultiLock(lockArray); + } + + public RLock getLock(String key){ + return redissonClient.getLock(key); + } + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application.yaml index 45470daf4..79e2b1f31 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/application.yaml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application.yaml @@ -206,3 +206,6 @@ yudao: end-code: 9999 # 这里配置 9999 的原因是,测试方便。 debug: false + +zn: + task-no: ZN #任务号开头 \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/houselocation/HouseLocationMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/houselocation/HouseLocationMapper.xml deleted file mode 100644 index 461db0fe4..000000000 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/houselocation/HouseLocationMapper.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/houselocation/WareHouseLocationMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/houselocation/WareHouseLocationMapper.xml new file mode 100644 index 000000000..696fe54ab --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/houselocation/WareHouseLocationMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + \ No newline at end of file