Merge branch 'dev' into cbs

# Conflicts:
#	yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/HouseLocationStrategyImpl.java
This commit is contained in:
cbs 2025-02-24 17:24:54 +08:00
commit 38c1be6d12
10 changed files with 29 additions and 15 deletions

View File

@ -12,9 +12,11 @@ import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMa
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO; import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO;
import cn.iocoder.yudao.module.system.handler.mapnode.NodeProcessingContext; import cn.iocoder.yudao.module.system.handler.mapnode.NodeProcessingContext;
import cn.iocoder.yudao.module.system.service.positionmap.PositionMapItemService; import cn.iocoder.yudao.module.system.service.positionmap.PositionMapItemService;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -28,7 +30,7 @@ import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Slf4j
@Tag(name = "管理后台 - 仓库点位地图子表") @Tag(name = "管理后台 - 仓库点位地图子表")
@RestController @RestController
@RequestMapping("/system/position-map-item") @RequestMapping("/system/position-map-item")

View File

@ -32,6 +32,9 @@ public class NodeBaseDTO {
@Schema(description = "实际坐标y轴") @Schema(description = "实际坐标y轴")
private String actualLocationY; private String actualLocationY;
@Schema(description = "点位自增排序")
private Long sortNum;
@Schema(description = "类型 1.路径点位 2.库位点 3.充电桩 4.停车点 5.区域变更点 6.等待点 --- 后续补充", example = "1") @Schema(description = "类型 1.路径点位 2.库位点 3.充电桩 4.停车点 5.区域变更点 6.等待点 --- 后续补充", example = "1")
private Integer type; private Integer type;

View File

@ -32,6 +32,9 @@ public class PositionMapItemPageReqVO extends PageParam {
@Schema(description = "坐标y轴") @Schema(description = "坐标y轴")
private String locationY; private String locationY;
@Schema(description = "点位自增排序")
private Long sortNum;
@Schema(description = "类型 1.路径点位 2.库位点 3.充电桩 4.停车点 5.区域变更点 6.等待点 --- 后续补充", example = "1") @Schema(description = "类型 1.路径点位 2.库位点 3.充电桩 4.停车点 5.区域变更点 6.等待点 --- 后续补充", example = "1")
private Integer type; private Integer type;

View File

@ -52,6 +52,9 @@ public class PositionMapItemRespVO {
@ExcelProperty("类型 1.路径点位 2.库位点 3.充电桩 4.停车点 5.区域变更点 6.等待点 --- 后续补充") @ExcelProperty("类型 1.路径点位 2.库位点 3.充电桩 4.停车点 5.区域变更点 6.等待点 --- 后续补充")
private Integer type; private Integer type;
@Schema(description = "点位自增排序")
private Long sortNum;
@Schema(description = "对应各个类型的独有属性Json格式 例如({库位长度:1,库位宽度:2,库位方向:单向}", example = "1") @Schema(description = "对应各个类型的独有属性Json格式 例如({库位长度:1,库位宽度:2,库位方向:单向}", example = "1")
private String dataJson; private String dataJson;

View File

@ -28,6 +28,9 @@ public class PositionMapItemSaveReqVO {
@Schema(description = "坐标y轴") @Schema(description = "坐标y轴")
private String locationY; private String locationY;
@Schema(description = "点位自增排序")
private Long sortNum;
@Schema(description = "类型 1.路径点位 2.库位点 3.充电桩 4.停车点 5.区域变更点 6.等待点 --- 后续补充", example = "1") @Schema(description = "类型 1.路径点位 2.库位点 3.充电桩 4.停车点 5.区域变更点 6.等待点 --- 后续补充", example = "1")
private Integer type; private Integer type;

View File

@ -55,6 +55,10 @@ public class PositionMapItemDO extends BaseDO {
* 实际坐标y轴 * 实际坐标y轴
*/ */
private String actualLocationY; private String actualLocationY;
/**
* 点位自增排序
*/
private Long sortNum;
/** /**
* 类型 1.路径点位 2.库位点 3.充电桩 4.停车点 5.区域变更点 6.等待点 --- 后续补充 * 类型 1.路径点位 2.库位点 3.充电桩 4.停车点 5.区域变更点 6.等待点 --- 后续补充
*/ */

View File

@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.NodeBaseD
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO; import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO;
import cn.iocoder.yudao.module.system.handler.mapnode.strategy.*; import cn.iocoder.yudao.module.system.handler.mapnode.strategy.*;
import cn.iocoder.yudao.module.system.service.positionmap.PositionMapItemService; import cn.iocoder.yudao.module.system.service.positionmap.PositionMapItemService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -16,6 +17,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import java.util.*; import java.util.*;
@Slf4j
@Component @Component
public class NodeProcessingContext { public class NodeProcessingContext {

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.system.handler.mapnode.strategy; package cn.iocoder.yudao.module.system.handler.mapnode.strategy;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
@ -8,6 +9,7 @@ import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHous
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.NodeBaseDTO; import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.NodeBaseDTO;
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO; import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
import cn.iocoder.yudao.module.system.service.houselocation.HouseLocationService; import cn.iocoder.yudao.module.system.service.houselocation.HouseLocationService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -19,11 +21,13 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.HOUSE_LOCATION_NO_EXIST; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.HOUSE_LOCATION_NO_EXIST;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.TASK_DETAIL_CHANGE_ROBOT; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.TASK_DETAIL_CHANGE_ROBOT;
import static com.baomidou.mybatisplus.core.toolkit.IdWorker.getId; import static com.baomidou.mybatisplus.core.toolkit.IdWorker.getId;
@Slf4j
@Component @Component
public class HouseLocationStrategyImpl implements NodeProcessingStrategy { public class HouseLocationStrategyImpl implements NodeProcessingStrategy {
@Resource @Resource
private HouseLocationService houseLocationService; private HouseLocationService houseLocationService;
//库位编号格式 - 第一个通配符为地图id 第二个通配符为随机数四位最后一个通配符为库位点层数
private static final String KW_NO_FORMAT = "KW-%s-%s-%s";
@Override @Override
public void processNodes(Long positionMapId, List<NodeBaseDTO> nodeBaseDTOS) { public void processNodes(Long positionMapId, List<NodeBaseDTO> nodeBaseDTOS) {
@ -41,7 +45,7 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy {
List<WareHouseLocationDO> wareHouseLocationDOS = JSONUtil.toList(item.getDataJson(), WareHouseLocationDO.class); List<WareHouseLocationDO> wareHouseLocationDOS = JSONUtil.toList(item.getDataJson(), WareHouseLocationDO.class);
// -- 筛选出 库位编号不为空 - 并且第最后一组数据 最大的值 - 如果没有则为0 // -- 筛选出 库位编号不为空 - 并且第最后一组数据 最大的值 - 如果没有则为0
int max = wareHouseLocationDOS.stream().map(WareHouseLocationDO::getLocationNo).filter(StrUtil::isNotEmpty) int max = wareHouseLocationDOS.stream().map(WareHouseLocationDO::getLocationNo).filter(StrUtil::isNotEmpty)
.mapToInt(s -> Integer.parseInt(s.split("_")[2])).max().orElse(0); .mapToInt(s -> Integer.parseInt(s.substring(s.length() - 1))).max().orElse(1);
int locationStorey = wareHouseLocationDOS.size(); int locationStorey = wareHouseLocationDOS.size();
for (WareHouseLocationDO wareHouseLocationDO : wareHouseLocationDOS) { for (WareHouseLocationDO wareHouseLocationDO : wareHouseLocationDOS) {
wareHouseLocationDO.setLocationX(item.getLocationX()); wareHouseLocationDO.setLocationX(item.getLocationX());
@ -53,7 +57,8 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy {
} }
if (StrUtil.isEmpty(wareHouseLocationDO.getLocationNo())) { if (StrUtil.isEmpty(wareHouseLocationDO.getLocationNo())) {
// -- 生成库位编号 - // -- 生成库位编号 -
wareHouseLocationDO.setLocationNo(positionMapId + "_" + item.getId() + "_" + max++); String locationNo = String.format(KW_NO_FORMAT, positionMapId, RandomUtil.randomNumbers(4), max++);
wareHouseLocationDO.setLocationNo(locationNo);
} }
wareHouseLocationDO.setMapId(positionMapId); wareHouseLocationDO.setMapId(positionMapId);
wareHouseLocationDO.setMapItemId(item.getId()); wareHouseLocationDO.setMapItemId(item.getId());

View File

@ -1,19 +1,10 @@
package cn.iocoder.yudao.module.system.handler.mapnode.strategy; package cn.iocoder.yudao.module.system.handler.mapnode.strategy;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.NodeBaseDTO; import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.NodeBaseDTO;
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
import cn.iocoder.yudao.module.system.service.houselocation.HouseLocationService;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import static com.baomidou.mybatisplus.core.toolkit.IdWorker.getId;
@Component @Component
public class MapNodeStrategyImpl implements NodeProcessingStrategy { public class MapNodeStrategyImpl implements NodeProcessingStrategy {

View File

@ -54,8 +54,6 @@ public class PositionMapServiceImpl extends ServiceImpl<PositionMapMapper, Posit
private PositionMapMapper positionMapMapper; private PositionMapMapper positionMapMapper;
@Value("${map.file.upload-path}") @Value("${map.file.upload-path}")
private String UPLOAD_DIR; private String UPLOAD_DIR;
@Resource
private StringRedisTemplate stringRedisTemplate;
@Override @Override
public Long createPositionMap(PositionMapSaveReqVO createReqVO) { public Long createPositionMap(PositionMapSaveReqVO createReqVO) {