Merge branch 'dev' into cbs

# Conflicts:
#	yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/houselocation/HouseLocationServiceImpl.java
This commit is contained in:
cbs 2025-04-01 16:10:54 +08:00
commit 2b2a9cad0d
9 changed files with 84 additions and 83 deletions

View File

@ -20,6 +20,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ -36,6 +37,9 @@ public class RobotReactiveStatusApiImpl implements RobotReactiveStatusApi {
@Resource @Resource
private RedisUtil redisUtil; private RedisUtil redisUtil;
@Resource
private StringRedisTemplate stringRedisTemplate;
@Resource @Resource
private RobotWarnMsgService warnMsgService; private RobotWarnMsgService warnMsgService;
@ -56,6 +60,10 @@ public class RobotReactiveStatusApiImpl implements RobotReactiveStatusApi {
String floorAreaKey = RobotTaskChcheConstant.ROBOT_FLOOR_AREA + data.getMac(); String floorAreaKey = RobotTaskChcheConstant.ROBOT_FLOOR_AREA + data.getMac();
redisUtil.set(floorAreaKey, JSON.toJSONString(data.getFloorZone())); redisUtil.set(floorAreaKey, JSON.toJSONString(data.getFloorZone()));
// -- get 老的数据 - 看有没有 - 有的话 - 对比下 - 如果相同 - 更新hashMap中key的value
// - 如果不相同的话 - 更新当前redis数据 - 然后 - 根据老的数据 hashMapRedis 中删除 这个key的数据
// - 然后插入到 对应的区域的hashMap中
//机器人异常等级 //机器人异常等级
if (ObjectUtil.isEmpty(data.getErrCode())) { if (ObjectUtil.isEmpty(data.getErrCode())) {
String errorLevelKey = RobotTaskChcheConstant.ROBOT_ERROR_LEVEL + data.getMac(); String errorLevelKey = RobotTaskChcheConstant.ROBOT_ERROR_LEVEL + data.getMac();

View File

@ -22,6 +22,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;

View File

@ -61,6 +61,7 @@ public class WareHouseLocationDO extends BaseDO {
/** /**
* 物料信息 * 物料信息
*/ */
@TableField(updateStrategy = FieldStrategy.IGNORED)
private String skuInfo; private String skuInfo;
/** /**
* 物料批次号 * 物料批次号

View File

@ -136,4 +136,10 @@ public interface WareHouseLocationMapper extends BaseMapperX<WareHouseLocationDO
* @param laneId * @param laneId
*/ */
void updateLocationLaneNameEmptyByLaneId(@Param("laneId") Long laneId); void updateLocationLaneNameEmptyByLaneId(@Param("laneId") Long laneId);
/**
* 设置库位的区域id和名称为空
* @param areaId
*/
void updateLocationAreaNameEmptyByAreaId(@Param("areaId") Long areaId);
} }

View File

@ -121,13 +121,6 @@ public class HouseAreaServiceImpl extends ServiceImpl<HouseAreaMapper, HouseArea
} }
HouseAreaDO houseArea = BeanUtil.copyProperties(createReqVO, HouseAreaDO.class); HouseAreaDO houseArea = BeanUtil.copyProperties(createReqVO, HouseAreaDO.class);
houseAreaMapper.insertOrUpdate(houseArea); houseAreaMapper.insertOrUpdate(houseArea);
// -- 先判定这些点位是否在同一区域内 - 如果不在则提示 哪些点位不在同一区域内
//1.获取原该线库绑定的点位列表
List<PositionMapItemDO> oldList = createReqVO.getId() == null ? Collections.emptyList() :
positionMapItemService.getByCondition(new PositionMapConditionDTO()
.setPositionMapId(createReqVO.getPositionMapId())
.setAreaId(createReqVO.getId())
.setType(NodeTypeEnum.WARE.getType()));
//2.查询目前的地图所有的库位点位列表 - 如果没有的话 - 就设为空列表先 - //2.查询目前的地图所有的库位点位列表 - 如果没有的话 - 就设为空列表先 -
List<PositionMapItemDO> list = positionMapItemService.getByCondition(new PositionMapConditionDTO() List<PositionMapItemDO> list = positionMapItemService.getByCondition(new PositionMapConditionDTO()
@ -143,40 +136,20 @@ public class HouseAreaServiceImpl extends ServiceImpl<HouseAreaMapper, HouseArea
throw exception(THERE_ARE_ALREADY_STORAGE_LOCATIONS_IN_OTHER_STORAGE_AREAS); throw exception(THERE_ARE_ALREADY_STORAGE_LOCATIONS_IN_OTHER_STORAGE_AREAS);
} }
// -- 这里去判断更新点位的线库信息
List<List<PositionMapItemDO>> allList = CollectionUtils.compareLists(oldList, list,
(oldVal, newVal) -> ObjectUtil.equal(oldVal.getAreaId(), newVal.getAreaId()));
List<PositionMapItemDO> editList = new ArrayList<>();
if (CollUtil.isNotEmpty(allList.get(0))) {
List<PositionMapItemDO> editItemList = allList.get(0);
editItemList.forEach(a -> a.setAreaId(houseArea.getId()));
// -- 新增的 就是更改的 - 需要更新的
editList.addAll(editItemList);
}
if (CollUtil.isNotEmpty(allList.get(2))) {
//需要删除的就是取消掉的
List<PositionMapItemDO> editItemList = allList.get(2);
editItemList.forEach(a -> a.setAreaId(null));
editList.addAll(allList.get(2));
}
List<WareHouseLocationDO> wareHouseLocationList = new ArrayList<>(); List<WareHouseLocationDO> wareHouseLocationList = new ArrayList<>();
editList.forEach(item -> { for (PositionMapItemDO item : list) {
List<WareHouseLocationDO> wareHouseLocationDOS = JSONUtil.toList(item.getDataJson(), WareHouseLocationDO.class); List<WareHouseLocationDO> wareHouseLocationDOS = JSONUtil.toList(item.getDataJson(), WareHouseLocationDO.class);
wareHouseLocationDOS.forEach(a -> { for (WareHouseLocationDO locationDO : wareHouseLocationDOS) {
if (item.getAreaId() == null) { locationDO.setAreaId(houseArea.getId());
a.setAreaId(null); locationDO.setAreaName(houseArea.getAreaName());
a.setAreaName(null); locationDO.setSkuInfo(createReqVO.getSkuInfo());
} else {
a.setAreaId(houseArea.getId());
a.setAreaName(houseArea.getAreaName());
} }
});
wareHouseLocationList.addAll(wareHouseLocationDOS); wareHouseLocationList.addAll(wareHouseLocationDOS);
item.setAreaId(houseArea.getId());
item.setDataJson(JSONUtil.toJsonStr(wareHouseLocationDOS)); item.setDataJson(JSONUtil.toJsonStr(wareHouseLocationDOS));
}); }
if (CollUtil.isNotEmpty(editList)) { if (CollUtil.isNotEmpty(list)) {
positionMapItemService.updateBatchById(editList); positionMapItemService.updateBatchById(list);
} }
if (CollUtil.isNotEmpty(wareHouseLocationList)) { if (CollUtil.isNotEmpty(wareHouseLocationList)) {
houseLocationService.updateBatchById(wareHouseLocationList); houseLocationService.updateBatchById(wareHouseLocationList);
@ -198,7 +171,20 @@ public class HouseAreaServiceImpl extends ServiceImpl<HouseAreaMapper, HouseArea
this.removeById(id); this.removeById(id);
//获取当前库区所对应的地图 //获取当前库区所对应的地图
// 点位中包含库区id的数据设为null // 点位中包含库区id的数据设为null
positionMapItemService.emptyAreaId(areaDO.getPositionMapId(), id); List<PositionMapItemDO> items = positionMapItemService.getByCondition(new PositionMapConditionDTO().setAreaId(id).setPositionMapId(areaDO.getPositionMapId()));
for (PositionMapItemDO item : items) {
item.setAreaId(null);
List<WareHouseLocationDO> wareHouseLocationDOS = JSONUtil.toList(item.getDataJson(), WareHouseLocationDO.class);
for (WareHouseLocationDO wareHouseLocationDO : wareHouseLocationDOS) {
wareHouseLocationDO.setAreaId(null);
wareHouseLocationDO.setAreaName(null);
wareHouseLocationDO.setSkuInfo(null);
}
item.setDataJson(JSONUtil.toJsonStr(wareHouseLocationDOS));
}
positionMapItemService.updateBatchById(items);
houseLocationService.updateLocationAreaNameEmptyByAreaId(id);
// positionMapItemService.emptyAreaId(areaDO.getPositionMapId(), id);
} }
} }

View File

@ -95,15 +95,8 @@ public class WareHouseLaneServiceImpl extends ServiceImpl<WareHouseLaneMapper, W
} }
WareHouseLaneDO houseLane = BeanUtil.copyProperties(createReqVO, WareHouseLaneDO.class); WareHouseLaneDO houseLane = BeanUtil.copyProperties(createReqVO, WareHouseLaneDO.class);
houseLaneMapper.insertOrUpdate(houseLane); houseLaneMapper.insertOrUpdate(houseLane);
// -- 先判定这些点位是否在同一区域内 - 如果不在则提示 哪些点位不在同一区域内
//1.获取原该线库绑定的点位列表
List<PositionMapItemDO> oldList = createReqVO.getId() == null ? Collections.emptyList() :
positionMapItemService.getByCondition(new PositionMapConditionDTO()
.setPositionMapId(createReqVO.getPositionMapId())
.setLaneId(createReqVO.getId())
.setType(NodeTypeEnum.WARE.getType()));
//2.查询目前的点位列表 - 如果没有的话 - 就设为空列表先 - //查询目前的点位列表 - 如果没有的话 - 就设为空列表先 -
List<PositionMapItemDO> list = positionMapItemService.getByCondition(new PositionMapConditionDTO() List<PositionMapItemDO> list = positionMapItemService.getByCondition(new PositionMapConditionDTO()
.setPositionMapId(createReqVO.getPositionMapId()) .setPositionMapId(createReqVO.getPositionMapId())
.setLaneId(createReqVO.getId()) .setLaneId(createReqVO.getId())
@ -123,45 +116,19 @@ public class WareHouseLaneServiceImpl extends ServiceImpl<WareHouseLaneMapper, W
throw exception(THE_LINE_LIBRARY_POINTS_ARE_NOT_LOCATED_IN_THE_SAME_AREA); throw exception(THE_LINE_LIBRARY_POINTS_ARE_NOT_LOCATED_IN_THE_SAME_AREA);
} }
} }
// -- 这里去判断更新点位的线库信息
List<List<PositionMapItemDO>> allList = CollectionUtils.compareLists(oldList, list,
(oldVal, newVal) -> ObjectUtil.equal(oldVal.getLaneId(), newVal.getLaneId()));
List<PositionMapItemDO> editList = new ArrayList<>();
if (CollUtil.isNotEmpty(allList.get(0))) {
List<PositionMapItemDO> editItemList = allList.get(0);
editItemList.forEach(a -> a.setLaneId(houseLane.getId()));
// -- 新增的 就是更改的 - 需要更新的
editList.addAll(editItemList);
}
if (CollUtil.isNotEmpty(allList.get(1))) {
// -- 需要更新的
editList.addAll(allList.get(1));
}
if (CollUtil.isNotEmpty(allList.get(2))) {
//需要删除的就是取消掉的
List<PositionMapItemDO> editItemList = allList.get(2);
editItemList.forEach(a -> a.setLaneId(null));
editList.addAll(allList.get(2));
}
List<WareHouseLocationDO> wareHouseLocationList = new ArrayList<>(); List<WareHouseLocationDO> wareHouseLocationList = new ArrayList<>();
editList.forEach(item -> { for (PositionMapItemDO item : list) {
item.setLaneId(houseLane.getId());
List<WareHouseLocationDO> wareHouseLocationDOS = JSONUtil.toList(item.getDataJson(), WareHouseLocationDO.class); List<WareHouseLocationDO> wareHouseLocationDOS = JSONUtil.toList(item.getDataJson(), WareHouseLocationDO.class);
wareHouseLocationDOS.forEach(a -> { for (WareHouseLocationDO wareHouseLocationDO : wareHouseLocationDOS) {
if (item.getLaneId() == null) { wareHouseLocationDO.setLaneId(houseLane.getId());
a.setLaneId(null); wareHouseLocationDO.setLaneName(houseLane.getLaneName());
a.setLaneName(null);
} else {
a.setLaneId(houseLane.getId());
a.setLaneName(houseLane.getLaneName());
} }
});
wareHouseLocationList.addAll(wareHouseLocationDOS); wareHouseLocationList.addAll(wareHouseLocationDOS);
item.setDataJson(JSONUtil.toJsonStr(wareHouseLocationDOS)); item.setDataJson(JSONUtil.toJsonStr(wareHouseLocationDOS));
}); }
if (CollUtil.isNotEmpty(editList)) { if (CollUtil.isNotEmpty(list)) {
positionMapItemService.updateBatchById(editList); positionMapItemService.updateBatchById(list);
} }
if (CollUtil.isNotEmpty(wareHouseLocationList)) { if (CollUtil.isNotEmpty(wareHouseLocationList)) {
houseLocationService.updateBatchById(wareHouseLocationList); houseLocationService.updateBatchById(wareHouseLocationList);
@ -174,6 +141,17 @@ public class WareHouseLaneServiceImpl extends ServiceImpl<WareHouseLaneMapper, W
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void delete(Long id) { public void delete(Long id) {
WareHouseLaneDO wareHouseLaneDO = this.getById(id); WareHouseLaneDO wareHouseLaneDO = this.getById(id);
List<PositionMapItemDO> items = positionMapItemService.getByCondition(new PositionMapConditionDTO().setLaneId(id).setPositionMapId(wareHouseLaneDO.getPositionMapId()));
for (PositionMapItemDO item : items) {
item.setLaneId(null);
List<WareHouseLocationDO> wareHouseLocationDOS = JSONUtil.toList(item.getDataJson(), WareHouseLocationDO.class);
for (WareHouseLocationDO wareHouseLocationDO : wareHouseLocationDOS) {
wareHouseLocationDO.setLaneId(null);
wareHouseLocationDO.setLaneName(null);
}
item.setDataJson(JSONUtil.toJsonStr(wareHouseLocationDOS));
}
positionMapItemService.updateBatchById(items);
this.removeById(id); this.removeById(id);
// 点位中包含线库id的数据设为null // 点位中包含线库id的数据设为null
positionMapItemService.emptyLaneId(wareHouseLaneDO.getPositionMapId(), id); positionMapItemService.emptyLaneId(wareHouseLaneDO.getPositionMapId(), id);

View File

@ -113,4 +113,10 @@ public interface HouseLocationService extends IService<WareHouseLocationDO> {
* @param list * @param list
*/ */
void updateHouseLocationList(List<WareHouseLocationSaveReqVO> list); void updateHouseLocationList(List<WareHouseLocationSaveReqVO> list);
/**
* 设置库区名称和id为空
* @param id
*/
void updateLocationAreaNameEmptyByAreaId(Long areaId);
} }

View File

@ -179,6 +179,11 @@ public class HouseLocationServiceImpl extends ServiceImpl<WareHouseLocationMappe
houseLocationMapper.updateLocationLaneNameEmptyByLaneId(laneId); houseLocationMapper.updateLocationLaneNameEmptyByLaneId(laneId);
} }
@Override
public void updateLocationAreaNameEmptyByAreaId(Long areaId) {
houseLocationMapper.updateLocationAreaNameEmptyByAreaId(areaId);
}
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void updateHouseLocationList(List<WareHouseLocationSaveReqVO> list) { public void updateHouseLocationList(List<WareHouseLocationSaveReqVO> list) {

View File

@ -524,6 +524,16 @@
where where
lane_id = #{laneId} lane_id = #{laneId}
</update> </update>
<update id="updateLocationAreaNameEmptyByAreaId">
update
ware_house_location
set
area_name = null,
area_id = null,
sku_info = null
where
area_id = #{areaId}
</update>
<select id="selectByTypeAndId" resultMap="BaseResultMap"> <select id="selectByTypeAndId" resultMap="BaseResultMap">