根据类型查询库位名称

This commit is contained in:
cbs 2025-01-16 10:27:19 +08:00
parent d9ac7b7cb6
commit d8576fca65
12 changed files with 245 additions and 93 deletions

View File

@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.controller.admin.houselocation;
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.controller.admin.houselocation.vo.WareHouseLocationVO;
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.*;
@ -93,4 +94,11 @@ public class WareHouseLocationController {
BeanUtils.toBean(list, WareHouseLocationRespVO.class));
}
@PostMapping("/getLocationByName")
@Operation(summary = "创建库位")
@PreAuthorize("@ss.hasPermission('ware:house-location:getLocationByName')")
public CommonResult<List<WareHouseLocationRespVO>> getLocationByName(@Valid @RequestBody WareHouseLocationVO requestVO) {
return success(houseLocationService.getLocationByName(requestVO));
}
}

View File

@ -65,24 +65,33 @@ public class WareHouseLocationPageReqVO extends PageParam {
@Schema(description = "库位坐标y轴")
private String locationY;
@Schema(description = "(库位上目前所放物品的宽)")
@Schema(description = "")
private BigDecimal locationWide;
@Schema(description = "(库位上目前所放物品的深)")
@Schema(description = "")
private BigDecimal locationDeep;
@Schema(description = "高(库位上目前所放物品的高)")
@Schema(description = "高(库位上目前所放物品的高)--备用")
private BigDecimal locationHeight;
@Schema(description = "库位默认高度(现场有水泥高出地面的高度)")
@Schema(description = "库位默认高度(现场有水泥高出地面的高度)--备用")
private BigDecimal locationDefaultHeight;
@Schema(description = "机车上报的高度/总高(如果两个箱子叠加,就是叠加后的总高度)")
@Schema(description = "机车上报的高度/总高(如果两个箱子叠加,就是叠加后的总高度)--备用")
private BigDecimal locationTotalHeight;
@Schema(description = "机车上报的托盘高度")
@Schema(description = "机车上报的托盘高度--备用")
private BigDecimal locationTrayHeight;
@Schema(description = "库位方向1单向、2双向、3三向、4四向")
private Integer direction;
@Schema(description = "进入方向0尾入、1头入")
private Integer inDirection;
@Schema(description = "离开方向0尾出、1头出")
private Integer outDirection;
@Schema(description = "层数")
private Integer locationStorey;

View File

@ -81,30 +81,42 @@ public class WareHouseLocationRespVO {
@ExcelProperty("库位坐标y轴")
private String locationY;
@Schema(description = "(库位上目前所放物品的宽)")
@ExcelProperty("(库位上目前所放物品的宽)")
@Schema(description = "")
@ExcelProperty("")
private BigDecimal locationWide;
@Schema(description = "(库位上目前所放物品的深)")
@ExcelProperty("(库位上目前所放物品的深)")
@Schema(description = "")
@ExcelProperty("")
private BigDecimal locationDeep;
@Schema(description = "高(库位上目前所放物品的高)")
@Schema(description = "高(库位上目前所放物品的高)--备用")
@ExcelProperty("高(库位上目前所放物品的高)")
private BigDecimal locationHeight;
@Schema(description = "库位默认高度(现场有水泥高出地面的高度)")
@Schema(description = "库位默认高度(现场有水泥高出地面的高度)--备用")
@ExcelProperty("库位默认高度(现场有水泥高出地面的高度)")
private BigDecimal locationDefaultHeight;
@Schema(description = "机车上报的高度/总高(如果两个箱子叠加,就是叠加后的总高度)")
@Schema(description = "机车上报的高度/总高(如果两个箱子叠加,就是叠加后的总高度)--备用")
@ExcelProperty("机车上报的高度/总高(如果两个箱子叠加,就是叠加后的总高度)")
private BigDecimal locationTotalHeight;
@Schema(description = "机车上报的托盘高度")
@Schema(description = "机车上报的托盘高度--备用")
@ExcelProperty("机车上报的托盘高度")
private BigDecimal locationTrayHeight;
@Schema(description = "库位方向1单向、2双向、3三向、4四向")
@ExcelProperty("库位方向1单向、2双向、3三向、4四向")
private Integer direction;
@Schema(description = "进入方向0尾入、1头入")
@ExcelProperty("进入方向0尾入、1头入")
private Integer inDirection;
@Schema(description = "离开方向0尾出、1头出")
@ExcelProperty("离开方向0尾出、1头出")
private Integer outDirection;
@Schema(description = "层数")
@ExcelProperty("层数")
private Integer locationStorey;

View File

@ -62,22 +62,31 @@ public class WareHouseLocationSaveReqVO {
@Schema(description = "库位坐标y轴")
private String locationY;
@Schema(description = "(库位上目前所放物品的宽)")
@Schema(description = "")
private BigDecimal locationWide;
@Schema(description = "(库位上目前所放物品的深)")
@Schema(description = "")
private BigDecimal locationDeep;
@Schema(description = "高(库位上目前所放物品的高)")
@Schema(description = "库位方向1单向、2双向、3三向、4四向")
private Integer direction;
@Schema(description = "进入方向0尾入、1头入")
private Integer inDirection;
@Schema(description = "离开方向0尾出、1头出")
private Integer outDirection;
@Schema(description = "高(库位上目前所放物品的高)--备用")
private BigDecimal locationHeight;
@Schema(description = "库位默认高度(现场有水泥高出地面的高度)")
@Schema(description = "库位默认高度(现场有水泥高出地面的高度)--备用")
private BigDecimal locationDefaultHeight;
@Schema(description = "机车上报的高度/总高(如果两个箱子叠加,就是叠加后的总高度)")
@Schema(description = "机车上报的高度/总高(如果两个箱子叠加,就是叠加后的总高度)--备用")
private BigDecimal locationTotalHeight;
@Schema(description = "机车上报的托盘高度")
@Schema(description = "机车上报的托盘高度--备用")
private BigDecimal locationTrayHeight;
@Schema(description = "层数")

View File

@ -0,0 +1,19 @@
package cn.iocoder.yudao.module.system.controller.admin.houselocation.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Data
public class WareHouseLocationVO {
@Schema(description = "放货类型1库位、2线库、 3区域", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@NotNull(message = "类型1库位、2线库、 3区域不能为空")
private Integer type;
@Schema(description = "位置", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@NotEmpty(message = "位置不能为空")
private String locationNo;
}

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.system.dal.dataobject.houselocation;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.*;
@ -90,27 +91,39 @@ public class WareHouseLocationDO extends BaseDO {
*/
private String locationY;
/**
* (库位上目前所放物品的宽)
*
*/
private BigDecimal locationWide;
/**
* (库位上目前所放物品的深)
*
*/
private BigDecimal locationDeep;
/**
* (库位上目前所放物品的高)
* 库位方向1单向2双向3三向4四向
*/
private Integer direction;
/**
* 进入方向0尾入1头入
*/
private Integer inDirection;
/**
* 离开方向0尾出1头出
*/
private Integer outDirection;
/**
* (库位上目前所放物品的高) --备用
*/
private BigDecimal locationHeight;
/**
* 库位默认高度(现场有水泥高出地面的高度)
* 库位默认高度(现场有水泥高出地面的高度)--备用
*/
private BigDecimal locationDefaultHeight;
/**
* 机车上报的高度/总高(如果两个箱子叠加就是叠加后的总高度)
* 机车上报的高度/总高(如果两个箱子叠加就是叠加后的总高度)--备用
*/
private BigDecimal locationTotalHeight;
/**
* 机车上报的托盘高度
* 机车上报的托盘高度--备用
*/
private BigDecimal locationTrayHeight;
/**

View File

@ -4,6 +4,8 @@ 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.controller.admin.houselocation.vo.WareHouseLocationRespVO;
import cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationVO;
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -59,7 +61,7 @@ public interface WareHouseLocationMapper extends BaseMapperX<WareHouseLocationDO
* @return
*/
WareHouseLocationDO selectByTypeAndId(@Param("locationUseStatus") Integer locationUseStatus,
@Param("type") Integer type,
@Param("takeType") Integer takeType,
@Param("id") Long id,
@Param("locationIds") List<Long> locationIds,
@Param("mapIds") Set<Long> mapIds);
@ -92,4 +94,11 @@ public interface WareHouseLocationMapper extends BaseMapperX<WareHouseLocationDO
void updateLocationLockList( @Param("locationIds") List<Long> locationIds,
@Param("taskId") Long taskId);
/**
* 根据类型查库位/线库/区域
* @param requestVO
* @return
*/
List<WareHouseLocationRespVO> getLocationByName(WareHouseLocationVO requestVO);
}

View File

@ -3,9 +3,13 @@ package cn.iocoder.yudao.module.system.service.houselocation;
import javax.validation.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
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.controller.admin.houselocation.vo.WareHouseLocationVO;
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
import java.util.List;
/**
* 库位 Service 接口
*
@ -51,4 +55,10 @@ public interface HouseLocationService {
*/
PageResult<WareHouseLocationDO> getHouseLocationPage(WareHouseLocationPageReqVO pageReqVO);
/**
*
* @param requestVO
* @return
*/
List<WareHouseLocationRespVO> getLocationByName(WareHouseLocationVO requestVO);
}

View File

@ -1,9 +1,12 @@
package cn.iocoder.yudao.module.system.service.houselocation;
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.controller.admin.houselocation.vo.WareHouseLocationVO;
import cn.iocoder.yudao.module.system.dal.dataobject.houselocation.WareHouseLocationDO;
import cn.iocoder.yudao.module.system.dal.mysql.houselocation.WareHouseLocationMapper;
import cn.iocoder.yudao.module.system.enums.robot.ReleaseTakeEnum;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
@ -12,6 +15,8 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.HOUSE_LOCATION_NOT_EXISTS;
@ -69,4 +74,9 @@ public class HouseLocationServiceImpl implements HouseLocationService {
return houseLocationMapper.selectPage(pageReqVO);
}
@Override
public List<WareHouseLocationRespVO> getLocationByName(WareHouseLocationVO requestVO) {
return houseLocationMapper.getLocationByName(requestVO);
}
}

View File

@ -45,15 +45,6 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
if(ObjectUtil.isNotEmpty(pageResult.getList())){
throw exception(INFORMATION_MAC_EXIST);
}
//AGV需要判断机车是否接收到此Mac地址
if(DeviceInformationEnum.PALLETIZER.getType().equals(createReqVO.getDeviceType())
&& ObjectUtil.isEmpty(createReqVO.getMacAddress())){
throw exception(INFORMATION_MAC_INPUT);
}
if(DeviceInformationEnum.PALLETIZER.getType().equals(createReqVO.getDeviceType())){
// String jiCheResponse = grpcServiceApi.robotExecption();
}
// 插入
DeviceInformationDO information = BeanUtils.toBean(createReqVO, DeviceInformationDO.class);
information.setDeviceStatus(1);

View File

@ -333,19 +333,19 @@ public class RobotTaskServiceImpl implements RobotTaskService {
doTakeRelease(robotTaskVo,locationIds);
break;
case PARK:
doPark(robotTaskVo);
doPark(robotTaskVo,locationIds);
break;
case CHARGE:
doCharge(robotTaskVo);
break;
case MOVE:
doMove(robotTaskVo);
doMove(robotTaskVo,locationIds);
break;
case TAKE:
doTake(robotTaskVo);
doTake(robotTaskVo,locationIds);
break;
case RELEASE:
doRelease(robotTaskVo);
doRelease(robotTaskVo,locationIds);
break;
case SCAN:
doScan(robotTaskVo);
@ -364,7 +364,8 @@ public class RobotTaskServiceImpl implements RobotTaskService {
* 检测托盘类型
* @param robotTaskVo
*/
private void doDetectingTrays(RobotTaskDetailAddVo robotTaskVo) {
@Transactional(rollbackFor = Exception.class)
public void doDetectingTrays(RobotTaskDetailAddVo robotTaskVo) {
}
@ -372,7 +373,8 @@ public class RobotTaskServiceImpl implements RobotTaskService {
* 扫描码
* @param robotTaskVo
*/
private void doScan(RobotTaskDetailAddVo robotTaskVo) {
@Transactional(rollbackFor = Exception.class)
public void doScan(RobotTaskDetailAddVo robotTaskVo) {
}
@ -380,31 +382,39 @@ public class RobotTaskServiceImpl implements RobotTaskService {
* 仅放货
* @param robotTaskVo
*/
private void doRelease(RobotTaskDetailAddVo robotTaskVo) {
@Transactional(rollbackFor = Exception.class)
public void doRelease(RobotTaskDetailAddVo robotTaskVo, List<Long> locationIds) {
setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),locationIds);
locationMapper.updateLocationLockStatus(robotTaskVo.getToLocationId(),0,robotTaskVo.getRobotTaskId());
locationIds.add(robotTaskVo.getToLocationId());
}
/**
* 仅取货
* @param robotTaskVo
*/
private void doTake(RobotTaskDetailAddVo robotTaskVo) {
@Transactional(rollbackFor = Exception.class)
public void doTake(RobotTaskDetailAddVo robotTaskVo, List<Long> locationIds) {
locationMapper.updateLocationLockStatus(robotTaskVo.getFromLocationId(),0,robotTaskVo.getRobotTaskId());
locationIds.add(robotTaskVo.getFromLocationId());
}
/**
* 移动
* @param robotTaskVo
*/
private void doMove(RobotTaskDetailAddVo robotTaskVo) {
@Transactional(rollbackFor = Exception.class)
public void doMove(RobotTaskDetailAddVo robotTaskVo, List<Long> locationIds) {
setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),locationIds);
locationIds.add(robotTaskVo.getToLocationId());
}
/**
* 充电
* @param robotTaskVo
*/
private void doCharge(RobotTaskDetailAddVo robotTaskVo) {
@Transactional(rollbackFor = Exception.class)
public void doCharge(RobotTaskDetailAddVo robotTaskVo) {
}
@ -412,8 +422,10 @@ public class RobotTaskServiceImpl implements RobotTaskService {
* 停车
* @param robotTaskVo
*/
private void doPark(RobotTaskDetailAddVo robotTaskVo) {
@Transactional(rollbackFor = Exception.class)
public void doPark(RobotTaskDetailAddVo robotTaskVo, List<Long> locationIds) {
setToLocation(robotTaskVo,getMapIdsByRobotNo(robotTaskVo.getRobotNo()),locationIds);
locationIds.add(robotTaskVo.getToLocationId());
}
/**
@ -435,17 +447,10 @@ public class RobotTaskServiceImpl implements RobotTaskService {
}
/**
* 取放
* @param robotTaskVo
* 设置停车/目标库位
*/
@Transactional(rollbackFor = Exception.class)
public void doTakeRelease(RobotTaskDetailAddVo robotTaskVo,List<Long> locationIds) {
Set<Long> mapIds = new HashSet<>();
if (ObjectUtil.isNotEmpty(robotTaskVo.getRobotNo())) {
mapIds = getMapIdsByRobotNo(robotTaskVo.getRobotNo());
}
//校验放货库位
public void setToLocation(RobotTaskDetailAddVo robotTaskVo,Set<Long> mapIds,List<Long> locationIds){
if (ReleaseTakeEnum.TO_LOCATION.getType().equals(robotTaskVo.getReleaseType())) {
WareHouseLocationDO query = WareHouseLocationDO.builder().id(robotTaskVo.getReleaseId()).build();
WareHouseLocationDO locationDO = locationMapper.queryAllByLimit(query);
@ -468,8 +473,16 @@ public class RobotTaskServiceImpl implements RobotTaskService {
robotTaskVo.setToLocationId(wareHouseLocationDO.getId());
robotTaskVo.setToLocationStorey(wareHouseLocationDO.getLocationStorey());
}
locationIds.add(robotTaskVo.getToLocationId());
//校验取货库位
}
/**
* 设置取货库位
* @param robotTaskVo
* @param mapIds
* @param locationIds
*/
@Transactional(rollbackFor = Exception.class)
public void setFromLocation(RobotTaskDetailAddVo robotTaskVo,Set<Long> mapIds,List<Long> locationIds) {
if (ReleaseTakeEnum.TO_LOCATION.getType().equals(robotTaskVo.getTakeType())) {
WareHouseLocationDO query = WareHouseLocationDO.builder().id(robotTaskVo.getTakeId()).build();
WareHouseLocationDO locationDO = locationMapper.queryAllByLimit(query);
@ -492,7 +505,27 @@ public class RobotTaskServiceImpl implements RobotTaskService {
robotTaskVo.setFromLocationId(wareHouseLocationDO.getId());
robotTaskVo.setFromLocationStorey(wareHouseLocationDO.getLocationStorey());
}
}
/**
* 取放
* @param robotTaskVo
*/
@Transactional(rollbackFor = Exception.class)
public void doTakeRelease(RobotTaskDetailAddVo robotTaskVo,List<Long> locationIds) {
Set<Long> mapIds = new HashSet<>();
if (ObjectUtil.isNotEmpty(robotTaskVo.getRobotNo())) {
mapIds = getMapIdsByRobotNo(robotTaskVo.getRobotNo());
}
//校验放货库位
setToLocation(robotTaskVo, mapIds,locationIds);
locationIds.add(robotTaskVo.getToLocationId());
//校验取货库位
setFromLocation(robotTaskVo,mapIds,locationIds);
locationIds.add(robotTaskVo.getFromLocationId());
//验证取货库位是否存在未完成的任务
Set<Long> set = new HashSet<>();
set.add(robotTaskVo.getFromLocationId());

View File

@ -513,39 +513,37 @@
from
ware_house_location
<where>
<choose>
<when test= " locationUseStatus != null ">
AND location_use_status = #{locationUseStatus}
</when>
<when test= " type != null and type == '1'">
AND id = #{id}
</when>
<when test= " type != null and type == '2'">
AND lane_id = #{id}
</when>
<when test= " type != null and type == '3'">
AND area_id = #{id}
</when>
<when test= " locationIds != null and locationIds != ''">
AND id not in
<foreach collection="locationIds" item="id" index="index" open="(" close=")"
separator=",">
#{id}
</foreach>
</when>
<when test= " mapIds != null and mapIds != ''">
AND map_id in
<foreach collection="mapIds" item="mapId" index="index" open="(" close=")"
separator=",">
#{mapId}
</foreach>
</when>
<when test= "1==1">
AND location_enable = '1'
AND location_lock = '1'
AND location_type = '0'
</when>
</choose>
<if test= " locationUseStatus != null ">
AND location_use_status = #{locationUseStatus}
</if>
<if test= "takeType != null and takeType == '1'.toString()">
AND id = #{id}
</if>
<if test= "takeType != null and takeType == '2'.toString()">
AND lane_id = #{id}
</if>
<if test= "takeType != null and takeType == '3'.toString()">
AND area_id = #{id}
</if>
<if test= " locationIds != null and locationIds.size() > 0">
AND id not in
<foreach collection="locationIds" item="id" index="index" open="(" close=")"
separator=",">
#{id}
</foreach>
</if>
<if test= " mapIds != null and mapIds.size() > 0">
AND map_id in
<foreach collection="mapIds" item="mapId" index="index" open="(" close=")"
separator=",">
#{mapId}
</foreach>
</if>
<if test= '"1"=="1"'>
AND location_enable = '1'
AND location_lock = '1'
AND location_type = '0'
</if>
</where>
order by location_number desc , location_storey asc
limit 1
@ -655,5 +653,36 @@
</if>
</where>
</select>
<select id="getLocationByName" resultType="cn.iocoder.yudao.module.system.controller.admin.houselocation.vo.WareHouseLocationRespVO">
<choose>
<when test="type == 1">
select
id,
location_no as locationNo
from
ware_house_location
where
location_no like concat('%', #{locationNo}, '%')
</when>
<when test="type == 2">
select
lane_id as id,
lane_name as locationNo
from
ware_house_lane
where
lane_name like concat('%', #{locationNo}, '%')
</when>
<when test="type == 3">
select
area_id as id,
area_name as locationNo
from
ware_house_area
where
area_name like concat('%', #{locationNo}, '%')
</when>
</choose>
</select>
</mapper>