From df480e1b9038a04f4303d6892b749892c5f15cab Mon Sep 17 00:00:00 2001 From: aikai Date: Thu, 16 Jan 2025 16:51:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=BA=93=E4=BD=8D=E7=82=B9?= =?UTF-8?q?=E4=BD=8D=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除 HouseAreaDO 中的 areaId 字段 - 修改 WareHouseLocationDO 的处理方式,支持批量导入- 更新 NodeBaseDTO,增加 positionMapId 字段 -调整 PositionMapItemDO 和相关 VO 类,移除 objectId 字段 - 更新数据库映射文件,适应新的数据结构 --- .../resources/mapper/WareHouseLocationDao.xml | 425 ------------------ .../framework/common/enums/NodeTypeEnum.java | 33 ++ .../positionmap/PositionMapController.java | 13 - .../PositionMapItemController.java | 9 +- .../admin/positionmap/dto/NodeBaseDTO.java | 1 - .../vo/PositionMapItemPageReqVO.java | 3 - .../positionmap/vo/PositionMapItemRespVO.java | 4 - .../vo/PositionMapItemSaveReqVO.java | 4 - .../dal/dataobject/housearea/HouseAreaDO.java | 6 +- .../positionmap/PositionMapItemDO.java | 4 - .../positionmap/PositionMapItemMapper.java | 1 - .../mapnode/NodeProcessingContext.java | 28 +- .../strategy/HouseLocationStrategyImpl.java | 13 +- .../PositionMapItemServiceImpl.java | 3 +- .../houselocation/WareHouseLocationMapper.xml | 6 +- 15 files changed, 79 insertions(+), 474 deletions(-) delete mode 100644 src/main/resources/mapper/WareHouseLocationDao.xml create mode 100644 yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/NodeTypeEnum.java diff --git a/src/main/resources/mapper/WareHouseLocationDao.xml b/src/main/resources/mapper/WareHouseLocationDao.xml deleted file mode 100644 index 8717dcfea..000000000 --- a/src/main/resources/mapper/WareHouseLocationDao.xml +++ /dev/null @@ -1,425 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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/enums/NodeTypeEnum.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/NodeTypeEnum.java new file mode 100644 index 000000000..cc27daab3 --- /dev/null +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/NodeTypeEnum.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.framework.common.enums; + +import cn.hutool.core.util.ObjUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 通用状态枚举 + * + * @author 芋道源码 + */ +@Getter +@AllArgsConstructor +public enum NodeTypeEnum { + ROUTE(1, "路径点位"), + WARE(2, "库位点"), + charging(3, "充电桩"), + PARKING(4, "停车点"), + CHANGE(5, "区域变更点"), + WAIT(6, "等待点"); + + /** + * 状态值 + */ + private final Integer status; + /** + * 状态名 + */ + private final String name; + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapController.java index 36a2ebd0f..2a3b9bd49 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapController.java @@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.system.controller.admin.positionmap; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapRespVO; -import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO; import cn.iocoder.yudao.module.system.service.positionmap.PositionMapService; import io.swagger.v3.oas.annotations.Operation; @@ -17,7 +16,6 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.annotation.security.PermitAll; import javax.servlet.http.HttpServletResponse; -import javax.validation.Valid; import java.io.IOException; import java.util.List; import java.util.Map; @@ -34,17 +32,6 @@ public class PositionMapController { @Resource private PositionMapService positionMapService; - private static final String UPLOAD_DIR = "/Users/aikai/project/"; - - - @PutMapping("/update") - @Operation(summary = "更新仓库点位地图") - @PreAuthorize("@ss.hasPermission('system:position-map:update')") - public CommonResult updatePositionMap(@Valid @RequestBody PositionMapSaveReqVO updateReqVO) { - positionMapService.updatePositionMap(updateReqVO); - return success(true); - } - @DeleteMapping("/delete") @Operation(summary = "删除仓库点位地图") @Parameter(name = "id", description = "编号", required = true) diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapItemController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapItemController.java index 53508cecd..154f5c1a2 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapItemController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapItemController.java @@ -1,6 +1,9 @@ package cn.iocoder.yudao.module.system.controller.admin.positionmap; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; @@ -43,9 +46,9 @@ public class PositionMapItemController { @Resource private NodeProcessingContext nodeProcessingContext; // -- 前端给所有的节点信息 - - @PostMapping("/batchSaveOrEdit") - @Operation(summary = "批量新增编辑节点") - public CommonResult batchSaveOrEdit(@RequestParam Long positionMapId, @Valid @RequestBody List nodeBaseDTOS) { + @PostMapping("/batchSaveOrEditOrDel") + @Operation(summary = "批量新增编辑删除节点") + public CommonResult batchSaveOrEditOrDel(@RequestParam Long positionMapId, @Valid @RequestBody List nodeBaseDTOS) { // -- 这里使用策略模式 - 根据各个类型区分 - 如果需要新增类型,新增策略实现类即可 - 如果不需要关联存储具体的表,直接将json存储到dataJson字段即可 Map> map = nodeBaseDTOS.stream().collect(Collectors.groupingBy(NodeBaseDTO::getType)); // -- 获取到对应地图的所有点位 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/dto/NodeBaseDTO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/dto/NodeBaseDTO.java index 47bc4ca0c..2b07a34a0 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/dto/NodeBaseDTO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/dto/NodeBaseDTO.java @@ -6,7 +6,6 @@ import lombok.ToString; @Schema(description = "管理后台 - 仓库点位地图子表 - 节点基础属性") @Data -@ToString(callSuper = true) public class NodeBaseDTO { @Schema(description = "id") private Long id; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemPageReqVO.java index 23c791ae3..4870daf3a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemPageReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemPageReqVO.java @@ -37,9 +37,6 @@ public class PositionMapItemPageReqVO extends PageParam { @Schema(description = "对应各个类型的独有属性Json格式 例如({库位长度:1,库位宽度:2,库位方向:单向})", example = "1") private String dataJson; - @Schema(description = "类型所对应表id(可空 - 不需要绑定具体表的话 存json即可)", example = "15418") - private Long objectId; - @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/positionmap/vo/PositionMapItemRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemRespVO.java index 56b2d8eff..a6e9ce7e1 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemRespVO.java @@ -43,10 +43,6 @@ public class PositionMapItemRespVO { @Schema(description = "对应各个类型的独有属性Json格式 例如({库位长度:1,库位宽度:2,库位方向:单向})", example = "1") private String dataJson; - @Schema(description = "类型所对应表id(可空 - 不需要绑定具体表的话 存json即可)", example = "15418") - @ExcelProperty("类型所对应表id(可空 - 不需要绑定具体表的话 存json即可)") - private Long objectId; - @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/positionmap/vo/PositionMapItemSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemSaveReqVO.java index db577e175..1c872a0da 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemSaveReqVO.java @@ -32,8 +32,4 @@ public class PositionMapItemSaveReqVO { @Schema(description = "对应各个类型的独有属性Json格式 例如({库位长度:1,库位宽度:2,库位方向:单向})", example = "1") private String dataJson; - - @Schema(description = "类型所对应表id(可空 - 不需要绑定具体表的话 存json即可)", example = "15418") - private Long objectId; - } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/housearea/HouseAreaDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/housearea/HouseAreaDO.java index cda6de4a7..9a02a1d84 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/housearea/HouseAreaDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/housearea/HouseAreaDO.java @@ -24,10 +24,6 @@ public class HouseAreaDO extends BaseDO { */ @TableId private Long id; - /** - * 库区id(自定义) - */ - private Long areaId; /** * 库区名称 */ @@ -37,4 +33,4 @@ public class HouseAreaDO extends BaseDO { */ private String areaMsg; -} \ 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/positionmap/PositionMapItemDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapItemDO.java index 0f279d1e0..78419fded 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapItemDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapItemDO.java @@ -56,9 +56,5 @@ public class PositionMapItemDO extends BaseDO { * 对应各个类型的独有属性Json格式 例如({库位长度:1,库位宽度:2,库位方向:单向}) */ private String dataJson; - /** - * 类型所对应表id(可空 - 不需要绑定具体表的话 存json即可) - */ - private Long objectId; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapItemMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapItemMapper.java index 6ad0fe86e..e6dc65af9 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapItemMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapItemMapper.java @@ -21,7 +21,6 @@ public interface PositionMapItemMapper extends BaseMapperX { .eqIfPresent(PositionMapItemDO::getLocationX, reqVO.getLocationX()) .eqIfPresent(PositionMapItemDO::getLocationY, reqVO.getLocationY()) .eqIfPresent(PositionMapItemDO::getType, reqVO.getType()) - .eqIfPresent(PositionMapItemDO::getObjectId, reqVO.getObjectId()) .betweenIfPresent(PositionMapItemDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(PositionMapItemDO::getId)); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/NodeProcessingContext.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/NodeProcessingContext.java index ed77357e0..fe3c01689 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/NodeProcessingContext.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/NodeProcessingContext.java @@ -3,19 +3,25 @@ package cn.iocoder.yudao.module.system.handler.mapnode; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSONUtil; +import cn.iocoder.yudao.framework.common.enums.NodeTypeEnum; 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.dal.dataobject.houselocation.WareHouseLocationDO; import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO; import cn.iocoder.yudao.module.system.handler.mapnode.strategy.HouseLocationStrategyImpl; import cn.iocoder.yudao.module.system.handler.mapnode.strategy.NodeProcessingStrategy; import cn.iocoder.yudao.module.system.service.positionmap.PositionMapItemService; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import static com.baomidou.mybatisplus.core.toolkit.IdWorker.getId; @@ -38,13 +44,31 @@ public class NodeProcessingContext { // 节点 // strategyMap.put(1, positionMapItemStrategyImpl); // 库位 - strategyMap.put(2, houseLocationStrategyImpl); + strategyMap.put(NodeTypeEnum.WARE.getStatus(), houseLocationStrategyImpl); // todo 可以继续添加更多的策略 } + @Transactional(rollbackFor = Exception.class) public void processNodesByStrategy(Long positionMapId, List oldItemList, int key, List nodeBaseDTOS) { // -- 这里处理节点 - 因为所有的类型都要建立在节点之上 - 把所有新增没有节点id的先分配id下 - 后续其他类型的需要绑定该id - nodeBaseDTOS.forEach(a->{if (a.getId() == null) {a.setId(getId());}}); + nodeBaseDTOS.forEach(item -> { + if (item.getId() == null) { + item.setId(getId()); + } + item.setPositionMapId(positionMapId); + // -- 如果是库位点 - 可能是一对多情况 - 需要将多个库位点的id set进去 + if (Objects.equals(item.getType(), NodeTypeEnum.WARE.getStatus())) { + List wareHouseLocationDOS = JSONUtil.toList(item.getDataJson(), WareHouseLocationDO.class); + wareHouseLocationDOS.forEach(wareHouseLocationDO -> { + wareHouseLocationDO.setLocationX(item.getLocationX()); + wareHouseLocationDO.setLocationY(item.getLocationY()); + if (wareHouseLocationDO.getId() == null) { + wareHouseLocationDO.setId(IdWorker.getId()); + } + }); + item.setDataJson(JSONUtil.toJsonStr(wareHouseLocationDOS)); + } + }); List newList = BeanUtil.copyToList(nodeBaseDTOS, PositionMapItemDO.class); List> list = CollectionUtils.diffList(oldItemList, newList, (oldVal, newVal) -> ObjectUtil.equal(oldVal.getId(), newVal.getId())); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/HouseLocationStrategyImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/HouseLocationStrategyImpl.java index 9cc3a1c5b..fbd69e3b3 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/HouseLocationStrategyImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/handler/mapnode/strategy/HouseLocationStrategyImpl.java @@ -1,12 +1,12 @@ package cn.iocoder.yudao.module.system.handler.mapnode.strategy; -import cn.hutool.core.bean.BeanUtil; 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.dal.dataobject.houselocation.WareHouseLocationDO; import cn.iocoder.yudao.module.system.service.houselocation.HouseLocationService; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -22,12 +22,15 @@ public class HouseLocationStrategyImpl implements NodeProcessingStrategy { public void processNodes(Long positionMapId, List nodeBaseDTOS) { // -- 策略1 处理库位点 // -- 将data里面的json 数据转为实体类 - 再对比节点id - 然后做新增删除修改操作 + // --------------- dataJSON里面没有具体的类的id - 然后库位要根据层数添加 多个库位数据 即 一个点位 对应多个库位 List newList = new ArrayList<>(); for (NodeBaseDTO nodeBaseDTO : nodeBaseDTOS) { - WareHouseLocationDO wareHouseLocationDO = JSONUtil.toBean(nodeBaseDTO.getDataJson(), WareHouseLocationDO.class); - wareHouseLocationDO.setMapId(positionMapId); - wareHouseLocationDO.setMapItemId(nodeBaseDTO.getId()); - newList.add(wareHouseLocationDO); + List wareHouseLocationDOS = JSONUtil.toList(nodeBaseDTO.getDataJson(), WareHouseLocationDO.class); + for (WareHouseLocationDO wareHouseLocationDO : wareHouseLocationDOS) { + wareHouseLocationDO.setMapId(positionMapId); + wareHouseLocationDO.setMapItemId(nodeBaseDTO.getId()); + newList.add(wareHouseLocationDO); + } } List oldList = houseLocationService.getByMapId(positionMapId); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemServiceImpl.java index 63092a69f..8e2085ce3 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemServiceImpl.java @@ -1,10 +1,12 @@ package cn.iocoder.yudao.module.system.service.positionmap; +import cn.hutool.json.JSONUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemSaveReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO; import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO; import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapItemMapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; @@ -71,7 +73,6 @@ public class PositionMapItemServiceImpl implements PositionMapItemService { public void batchSaveOrEditOrDel(Long positionMapId, List> list) { //批量添加、修改、删除 if (isNotEmpty(list.get(0))) { - list.get(0).forEach(item -> item.setPositionMapId(positionMapId)); positionMapItemMapper.insertBatch(list.get(0)); } if (isNotEmpty(list.get(1))) { 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 index 8d6c4e9ed..e124ac989 100644 --- 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 @@ -666,7 +666,7 @@ select - lane_id as id, + id as id, lane_name as locationNo from ware_house_lane @@ -675,7 +675,7 @@ select - area_id as id, + id as id, area_name as locationNo from ware_house_area @@ -685,4 +685,4 @@ - \ No newline at end of file +