diff --git a/src/main/java/com/gaotao/modules/automatedWarehouse/entity/AgvStationData.java b/src/main/java/com/gaotao/modules/automatedWarehouse/entity/AgvStationData.java new file mode 100644 index 0000000..158b034 --- /dev/null +++ b/src/main/java/com/gaotao/modules/automatedWarehouse/entity/AgvStationData.java @@ -0,0 +1,40 @@ +package com.gaotao.modules.automatedWarehouse.entity; + +import lombok.Data; +import org.apache.ibatis.type.Alias; + +/** + * @Description AGV站点信息业务实体类 - 用于查询和业务操作 - rqrq + * @Author rqrq + * @Date 2025/10/14 + */ +@Data +@Alias("AgvStationData") +public class AgvStationData extends AgvStation { + + /** + * 分页参数 - 当前页码 + */ + private Integer page; + + /** + * 分页参数 - 每页数量 + */ + private Integer limit; + + /** + * 查询条件 - 站点编码(模糊查询) + */ + private String searchStationCode; + + /** + * 查询条件 - 站点名称(模糊查询) + */ + private String searchStationName; + + /** + * 查询条件 - 站点ID(模糊查询) + */ + private String searchStationId; +} + diff --git a/src/main/java/com/gaotao/modules/automatedWarehouse/entity/Area.java b/src/main/java/com/gaotao/modules/automatedWarehouse/entity/Area.java new file mode 100644 index 0000000..a82365b --- /dev/null +++ b/src/main/java/com/gaotao/modules/automatedWarehouse/entity/Area.java @@ -0,0 +1,27 @@ +package com.gaotao.modules.automatedWarehouse.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import org.apache.ibatis.type.Alias; + +/** + * @Description 区域信息基础实体类 - 直接映射数据库表 - rqrq + * @Author rqrq + * @Date 2025/10/14 + */ +@Data +@TableName("area") +@Alias("Area") +public class Area { + + /** + * 区域ID + */ + private String areaId; + + /** + * 区域描述 + */ + private String areaDesc; +} + diff --git a/src/main/java/com/gaotao/modules/automatedWarehouse/mapper/AgvStationMapper.java b/src/main/java/com/gaotao/modules/automatedWarehouse/mapper/AgvStationMapper.java new file mode 100644 index 0000000..343455b --- /dev/null +++ b/src/main/java/com/gaotao/modules/automatedWarehouse/mapper/AgvStationMapper.java @@ -0,0 +1,26 @@ +package com.gaotao.modules.automatedWarehouse.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.gaotao.modules.automatedWarehouse.entity.AgvStation; +import com.gaotao.modules.automatedWarehouse.entity.Area; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * @Description AGV站点信息Mapper - rqrq + * @Author rqrq + * @Date 2025/10/14 + */ +@Mapper +public interface AgvStationMapper extends BaseMapper { + + /** + * @Description 获取区域类型下拉选项 - rqrq + * @return List + * @author rqrq + * @date 2025/10/14 + */ + List getAreaOptions(); +} + diff --git a/src/main/java/com/gaotao/modules/automatedWarehouse/service/AgvStationService.java b/src/main/java/com/gaotao/modules/automatedWarehouse/service/AgvStationService.java new file mode 100644 index 0000000..a044b2a --- /dev/null +++ b/src/main/java/com/gaotao/modules/automatedWarehouse/service/AgvStationService.java @@ -0,0 +1,51 @@ +package com.gaotao.modules.automatedWarehouse.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gaotao.common.utils.PageUtils; +import com.gaotao.modules.automatedWarehouse.entity.AgvStation; +import com.gaotao.modules.automatedWarehouse.entity.AgvStationData; +import com.gaotao.modules.automatedWarehouse.entity.Area; + +import java.util.List; + +/** + * @Description AGV站点信息服务接口 - rqrq + * @Author rqrq + * @Date 2025/10/14 + */ +public interface AgvStationService extends IService { + + /** + * @Description 分页查询AGV站点列表 - rqrq + * @param data 查询条件 + * @return PageUtils + * @author rqrq + * @date 2025/10/14 + */ + PageUtils queryPage(AgvStationData data) throws Exception; + + /** + * @Description 新增AGV站点 - rqrq + * @param data 站点信息 + * @author rqrq + * @date 2025/10/14 + */ + void addAgvStation(AgvStationData data) throws Exception; + + /** + * @Description 修改AGV站点 - rqrq + * @param data 站点信息 + * @author rqrq + * @date 2025/10/14 + */ + void updateAgvStation(AgvStationData data) throws Exception; + + /** + * @Description 获取区域类型下拉选项 - rqrq + * @return List + * @author rqrq + * @date 2025/10/14 + */ + List getAreaOptions() throws Exception; +} + diff --git a/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AgvStationServiceImpl.java b/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AgvStationServiceImpl.java new file mode 100644 index 0000000..f4c04a9 --- /dev/null +++ b/src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AgvStationServiceImpl.java @@ -0,0 +1,249 @@ +package com.gaotao.modules.automatedWarehouse.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import com.gaotao.common.utils.PageUtils; +import com.gaotao.modules.automatedWarehouse.entity.AgvStation; +import com.gaotao.modules.automatedWarehouse.entity.AgvStationData; +import com.gaotao.modules.automatedWarehouse.entity.Area; +import com.gaotao.modules.automatedWarehouse.mapper.AgvStationMapper; +import com.gaotao.modules.automatedWarehouse.service.AgvStationService; +import com.gaotao.modules.warehouse.entity.Location; +import com.gaotao.modules.warehouse.dao.LocationMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.List; + +/** + * @Description AGV站点信息服务实现类 - rqrq + * @Author rqrq + * @Date 2025/10/14 + */ +@Service +public class AgvStationServiceImpl extends ServiceImpl + implements AgvStationService { + + @Autowired + private LocationMapper locationMapper; + + /** + * @Description 分页查询AGV站点列表 - rqrq + * @param data 查询条件 + * @return PageUtils + * @author rqrq + * @date 2025/10/14 + */ + @Override + public PageUtils queryPage(AgvStationData data) throws Exception { + System.out.println("开始查询AGV站点列表 - rqrq"); + + // 构建查询条件 - rqrq + QueryWrapper wrapper = new QueryWrapper<>(); + + // 只查询station_type='正式站点' 且 active='Y'的数据 - rqrq + if (StringUtils.hasText(data.getStationType())) { + wrapper.eq("station_type", data.getStationType()); + } + if (StringUtils.hasText(data.getActive())) { + wrapper.eq("active", data.getActive()); + } + + // 站点编码模糊查询 - rqrq + if (StringUtils.hasText(data.getSearchStationCode())) { + wrapper.like("station_code", data.getSearchStationCode()); + } + + // 站点名称模糊查询 - rqrq + if (StringUtils.hasText(data.getSearchStationName())) { + wrapper.like("station_name", data.getSearchStationName()); + } + + // 站点ID模糊查询 - rqrq + if (StringUtils.hasText(data.getSearchStationId())) { + wrapper.like("station_id", data.getSearchStationId()); + } + + // 按ID倒序排列 - rqrq + wrapper.orderByDesc("id"); + + // 分页查询 - rqrq + int page = data.getPage() != null ? data.getPage() : 1; + int limit = data.getLimit() != null ? data.getLimit() : 20; + + IPage pageResult = this.baseMapper.selectPage( + new Page<>(page, limit), + wrapper + ); + + System.out.println("查询AGV站点列表完成 - rqrq,共" + pageResult.getTotal() + "条记录"); + + return new PageUtils(pageResult); + } + + /** + * @Description 新增AGV站点 - rqrq + * @param data 站点信息 + * @author rqrq + * @date 2025/10/14 + */ + @Override + public void addAgvStation(AgvStationData data) throws Exception { + System.out.println("开始新增AGV站点 - rqrq,站点编码:" + data.getStationCode()); + + // 校验库位是否存在 - rqrq + validateLocation(data.getLocationCode(), data.getWarehouseCode()); + + // 根据area_type查询area表获取area_desc - rqrq + if (StringUtils.hasText(data.getAreaType())) { + List areaList = this.baseMapper.getAreaOptions(); + for (Area area : areaList) { + if (data.getAreaType().equals(area.getAreaId())) { + data.setStationArea(area.getAreaDesc()); + break; + } + } + } + + // 根据status_db设置status - rqrq + if (data.getStatusDb() != null) { + switch (data.getStatusDb()) { + case 0: + data.setStatus("空闲"); + break; + case 1: + data.setStatus("有货"); + break; + case 2: + data.setStatus("待放货"); + break; + case 3: + data.setStatus("待取货"); + break; + default: + data.setStatus("未知"); + break; + } + } + + // 设置默认站点类型为"正式站点" - rqrq + if (!StringUtils.hasText(data.getStationType())) { + data.setStationType("正式站点"); + } + + // 保存到数据库 - rqrq + this.save(data); + + System.out.println("新增AGV站点完成 - rqrq"); + } + + /** + * @Description 修改AGV站点 - rqrq + * @param data 站点信息 + * @author rqrq + * @date 2025/10/14 + */ + @Override + public void updateAgvStation(AgvStationData data) throws Exception { + System.out.println("开始修改AGV站点 - rqrq,站点ID:" + data.getId()); + + // 校验库位是否存在 - rqrq + validateLocation(data.getLocationCode(), data.getWarehouseCode()); + + // 根据area_type查询area表获取area_desc - rqrq + if (StringUtils.hasText(data.getAreaType())) { + List areaList = this.baseMapper.getAreaOptions(); + for (Area area : areaList) { + if (data.getAreaType().equals(area.getAreaId())) { + data.setStationArea(area.getAreaDesc()); + break; + } + } + } + + // 根据status_db设置status - rqrq + if (data.getStatusDb() != null) { + switch (data.getStatusDb()) { + case 0: + data.setStatus("空闲"); + break; + case 1: + data.setStatus("有货"); + break; + case 2: + data.setStatus("待放货"); + break; + case 3: + data.setStatus("待取货"); + break; + default: + data.setStatus("未知"); + break; + } + } + + // 更新到数据库 - rqrq + this.updateById(data); + + System.out.println("修改AGV站点完成 - rqrq"); + } + + /** + * @Description 获取区域类型下拉选项 - rqrq + * @return List + * @author rqrq + * @date 2025/10/14 + */ + @Override + public List getAreaOptions() throws Exception { + System.out.println("开始获取区域类型下拉选项 - rqrq"); + + List areaList = this.baseMapper.getAreaOptions(); + + System.out.println("获取区域类型下拉选项完成 - rqrq,共" + areaList.size() + "条记录"); + + return areaList; + } + + /** + * @Description 校验库位是否存在于指定仓库 - rqrq + * @param locationCode 库位编码 + * @param warehouseCode 仓库编码 + * @author rqrq + * @date 2025/10/14 + */ + private void validateLocation(String locationCode, String warehouseCode) { + System.out.println("开始校验库位 - rqrq,库位编码:" + locationCode + ",仓库编码:" + warehouseCode); + + // 检查参数是否为空 - rqrq + if (!StringUtils.hasText(locationCode)) { + System.out.println("库位编码为空,跳过校验 - rqrq"); + return; + } + + if (!StringUtils.hasText(warehouseCode)) { + System.out.println("仓库编码为空,跳过校验 - rqrq"); + return; + } + + // 查询库位表,检查库位是否存在于指定仓库 - rqrq + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("LocationID", locationCode); + wrapper.eq("WareHouseID", warehouseCode); + + Location location = locationMapper.selectOne(wrapper); + + if (location == null) { + String errorMsg = "仓库【" + warehouseCode + "】下不存在库位【" + locationCode + "】,请先在库位管理中创建该库位"; + System.out.println("库位校验失败 - rqrq:" + errorMsg); + throw new RuntimeException(errorMsg); + } + + System.out.println("库位校验通过 - rqrq"); + } +} + diff --git a/src/main/resources/mapper/automatedWarehouse/AgvStationMapper.xml b/src/main/resources/mapper/automatedWarehouse/AgvStationMapper.xml new file mode 100644 index 0000000..b1aa2ea --- /dev/null +++ b/src/main/resources/mapper/automatedWarehouse/AgvStationMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + +