feat(system): 优化库区管理和设备信息展示
- 新增库区删除功能 - 完善设备状态信息统计 - 优化地图点位与库区、通道关联逻辑 - 重构设备信息获取方法 - 优化数据字典查询效率
This commit is contained in:
parent
9ee9fc7994
commit
1be88c8b42
@ -92,6 +92,18 @@ public class PositionMapLineDTO {
|
|||||||
@Schema(description = "膨胀区域右")
|
@Schema(description = "膨胀区域右")
|
||||||
private BigDecimal expansionZoneRight;
|
private BigDecimal expansionZoneRight;
|
||||||
|
|
||||||
|
@Schema(description = "起点宽")
|
||||||
|
private BigDecimal beginWidth;
|
||||||
|
|
||||||
|
@Schema(description = "起点高")
|
||||||
|
private BigDecimal beginHigh;
|
||||||
|
|
||||||
|
@Schema(description = "终点宽")
|
||||||
|
private BigDecimal endWidth;
|
||||||
|
|
||||||
|
@Schema(description = "终点高")
|
||||||
|
private BigDecimal endHigh;
|
||||||
|
|
||||||
@Schema(description = "车头朝向( 0:正正 1:正反 2:反正 3:反反)", example = "15890")
|
@Schema(description = "车头朝向( 0:正正 1:正反 2:反正 3:反反)", example = "15890")
|
||||||
private Integer toward;
|
private Integer toward;
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.system.controller.admin.bulletinboard.vo;
|
package cn.iocoder.yudao.module.system.controller.admin.bulletinboard.vo;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.DeviceStatusInfoVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInformationStatisticsVO;
|
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInformationStatisticsVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnMsgDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnMsgDO;
|
||||||
@ -22,4 +23,8 @@ public class BulletinBoardVO {
|
|||||||
private RobotInformationStatisticsVO statistics;
|
private RobotInformationStatisticsVO statistics;
|
||||||
@Schema(description = "车辆异常信息")
|
@Schema(description = "车辆异常信息")
|
||||||
private List<RobotWarnMsgDO> robotWarnMsgDOS;
|
private List<RobotWarnMsgDO> robotWarnMsgDOS;
|
||||||
|
@Schema(description = "车辆信息")
|
||||||
|
List<RobotElectricityLevelVO> robotElectricityLevelVOS;
|
||||||
|
@Schema(description = "设备信息")
|
||||||
|
private List<DeviceStatusInfoVO> deviceStatusInfoVOS;
|
||||||
}
|
}
|
||||||
|
@ -9,8 +9,20 @@ import lombok.ToString;
|
|||||||
public class RobotElectricityLevelVO {
|
public class RobotElectricityLevelVO {
|
||||||
@Schema(description = "AGV编号")
|
@Schema(description = "AGV编号")
|
||||||
private String robotNo;
|
private String robotNo;
|
||||||
@Schema(description = "状态")
|
@Schema(description = "设备mac地址")
|
||||||
private String status;
|
private String macAddress;
|
||||||
|
@Schema(description = "待命 0否 1是")
|
||||||
|
private Integer standby = 0;
|
||||||
|
@Schema(description = "任务中 0否 1是")
|
||||||
|
private Integer inTask = 0;
|
||||||
|
@Schema(description = "锁定 0否 1是")
|
||||||
|
private Integer doLock = 0;
|
||||||
|
@Schema(description = "离线 0否 1是")
|
||||||
|
private Integer offline = 0;
|
||||||
|
@Schema(description = "充电中 0否 1是")
|
||||||
|
private Integer charge = 0;
|
||||||
|
@Schema(description = "故障 0否 1是")
|
||||||
|
private Integer fault = 0;
|
||||||
@Schema(description = "电量")
|
@Schema(description = "电量")
|
||||||
private String batSoc;
|
private String batSoc;
|
||||||
}
|
}
|
||||||
|
@ -3,8 +3,11 @@ package cn.iocoder.yudao.module.system.controller.admin.housearea;
|
|||||||
import cn.iocoder.yudao.module.system.controller.admin.housearea.vo.HouseAreaPageReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.housearea.vo.HouseAreaPageReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.housearea.vo.HouseAreaRespVO;
|
import cn.iocoder.yudao.module.system.controller.admin.housearea.vo.HouseAreaRespVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.housearea.vo.HouseAreaSaveReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.housearea.vo.HouseAreaSaveReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.houselane.vo.WareHouseLanePageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.houselane.vo.WareHouseLaneRespVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.houselane.vo.WareHouseLaneSaveReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.houselane.vo.WareHouseLaneSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.housearea.HouseAreaDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.housearea.HouseAreaDO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.houselane.WareHouseLaneDO;
|
||||||
import cn.iocoder.yudao.module.system.service.housearea.HouseAreaService;
|
import cn.iocoder.yudao.module.system.service.housearea.HouseAreaService;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
@ -87,4 +90,12 @@ public class HouseAreaController {
|
|||||||
return success(BeanUtils.toBean(list, HouseAreaRespVO.class));
|
return success(BeanUtils.toBean(list, HouseAreaRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delete")
|
||||||
|
@Operation(summary = "删除库区")
|
||||||
|
@Parameter(name = "id", description = "菜单编号", required= true, example = "1024")
|
||||||
|
public CommonResult<Boolean> delete(@RequestParam("id") Long id) {
|
||||||
|
houseAreaService.delete(id);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,10 @@ public class HouseAreaRespVO {
|
|||||||
@ExcelProperty("库区说明")
|
@ExcelProperty("库区说明")
|
||||||
private String areaMsg;
|
private String areaMsg;
|
||||||
|
|
||||||
|
@Schema(description = "物料信息")
|
||||||
|
@ExcelProperty("物料信息")
|
||||||
|
private String skuInfo;
|
||||||
|
|
||||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
@ExcelProperty("创建时间")
|
@ExcelProperty("创建时间")
|
||||||
private LocalDateTime createTime;
|
private LocalDateTime createTime;
|
||||||
|
@ -1,10 +1,15 @@
|
|||||||
package cn.iocoder.yudao.module.system.controller.admin.houselane;
|
package cn.iocoder.yudao.module.system.controller.admin.houselane;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.housearea.vo.HouseAreaPageReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.housearea.vo.HouseAreaRespVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.houselane.vo.WareHouseLanePageReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.houselane.vo.WareHouseLaneRespVO;
|
import cn.iocoder.yudao.module.system.controller.admin.houselane.vo.WareHouseLaneRespVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.houselane.vo.WareHouseLaneSaveReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.houselane.vo.WareHouseLaneSaveReqVO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.housearea.HouseAreaDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.houselane.WareHouseLaneDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.houselane.WareHouseLaneDO;
|
||||||
import cn.iocoder.yudao.module.system.service.houselane.WareHouseLaneService;
|
import cn.iocoder.yudao.module.system.service.houselane.WareHouseLaneService;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
@ -62,4 +67,20 @@ public class WareHouseLaneController {
|
|||||||
.orderByAsc(WareHouseLaneDO::getId));
|
.orderByAsc(WareHouseLaneDO::getId));
|
||||||
return success(BeanUtils.toBean(list, WareHouseLaneRespVO.class));
|
return success(BeanUtils.toBean(list, WareHouseLaneRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/page")
|
||||||
|
@Operation(summary = "获得线库分页")
|
||||||
|
@PreAuthorize("@ss.hasPermission('ware:house-area:query')")
|
||||||
|
public CommonResult<PageResult<WareHouseLaneRespVO>> getHouseAreaPage(@Valid WareHouseLanePageReqVO pageReqVO) {
|
||||||
|
PageResult<WareHouseLaneDO> pageResult = houseLaneService.getHouseLanePage(pageReqVO);
|
||||||
|
return success(BeanUtils.toBean(pageResult, WareHouseLaneRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delete")
|
||||||
|
@Operation(summary = "删除线库")
|
||||||
|
@Parameter(name = "id", description = "菜单编号", required= true, example = "1024")
|
||||||
|
public CommonResult<Boolean> delete(@RequestParam("id") Long id) {
|
||||||
|
houseLaneService.delete(id);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
package cn.iocoder.yudao.module.system.controller.admin.positionmap;
|
package cn.iocoder.yudao.module.system.controller.admin.positionmap;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.iocoder.yudao.framework.common.enums.NodeTypeEnum;
|
import cn.iocoder.yudao.framework.common.enums.NodeTypeEnum;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.NodeBaseDTO;
|
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.NodeBaseDTO;
|
||||||
@ -19,6 +21,7 @@ import org.springframework.web.bind.annotation.*;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -45,12 +48,15 @@ public class PositionMapItemController {
|
|||||||
Map<Integer, List<NodeBaseDTO>> map = nodeBaseDTOS.stream().collect(Collectors.groupingBy(NodeBaseDTO::getType));
|
Map<Integer, List<NodeBaseDTO>> map = nodeBaseDTOS.stream().collect(Collectors.groupingBy(NodeBaseDTO::getType));
|
||||||
// -- 获取到对应地图的所有点位
|
// -- 获取到对应地图的所有点位
|
||||||
List<PositionMapItemDO> oldList = positionMapItemService.getByMapId(positionMapId);
|
List<PositionMapItemDO> oldList = positionMapItemService.getByMapId(positionMapId);
|
||||||
Map<Integer, List<PositionMapItemDO>> oldMap = oldList.stream().collect(Collectors.groupingBy(PositionMapItemDO::getType));
|
List<PositionMapItemDO> newAllList = new ArrayList<>();
|
||||||
for (Integer key : NodeTypeEnum.getAllTypes()) {
|
for (Integer key : NodeTypeEnum.getAllTypes()) {
|
||||||
List<NodeBaseDTO> nodeBaseDTOList = CollectionUtil.isEmpty(map.get(key)) ? Collections.emptyList() : map.get(key);
|
List<NodeBaseDTO> nodeBaseDTOList = CollectionUtil.isEmpty(map.get(key)) ? Collections.emptyList() : map.get(key);
|
||||||
List<PositionMapItemDO> oldItemList = CollectionUtil.isEmpty(oldMap.get(key)) ? Collections.emptyList() : oldMap.get(key);
|
List<PositionMapItemDO> newList = nodeProcessingContext.processNodesByStrategy(positionMapId, key, nodeBaseDTOList);
|
||||||
nodeProcessingContext.processNodesByStrategy(positionMapId, oldItemList, key, nodeBaseDTOList);
|
newAllList.addAll(newList);
|
||||||
}
|
}
|
||||||
|
List<List<PositionMapItemDO>> list = CollectionUtils.compareLists(oldList, newAllList,
|
||||||
|
(oldVal, newVal) -> ObjectUtil.equal(oldVal.getId(), newVal.getId()));
|
||||||
|
positionMapItemService.batchSaveOrEditOrDel(positionMapId, list);
|
||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,6 +90,18 @@ public class PositionMapLineDTO {
|
|||||||
@Schema(description = "膨胀区域右")
|
@Schema(description = "膨胀区域右")
|
||||||
private BigDecimal expansionZoneRight;
|
private BigDecimal expansionZoneRight;
|
||||||
|
|
||||||
|
@Schema(description = "起点宽")
|
||||||
|
private BigDecimal beginWidth;
|
||||||
|
|
||||||
|
@Schema(description = "起点高")
|
||||||
|
private BigDecimal beginHigh;
|
||||||
|
|
||||||
|
@Schema(description = "终点宽")
|
||||||
|
private BigDecimal endWidth;
|
||||||
|
|
||||||
|
@Schema(description = "终点高")
|
||||||
|
private BigDecimal endHigh;
|
||||||
|
|
||||||
@Schema(description = "车头朝向( 0:正正 1:正反 2:反正 3:反反)")
|
@Schema(description = "车头朝向( 0:正正 1:正反 2:反正 3:反反)")
|
||||||
private Integer toward;
|
private Integer toward;
|
||||||
}
|
}
|
||||||
|
@ -85,6 +85,18 @@ public class PositionMapLinePageReqVO extends PageParam {
|
|||||||
@Schema(description = "膨胀区域右", example = "15890")
|
@Schema(description = "膨胀区域右", example = "15890")
|
||||||
private BigDecimal expansionZoneRight;
|
private BigDecimal expansionZoneRight;
|
||||||
|
|
||||||
|
@Schema(description = "起点宽")
|
||||||
|
private BigDecimal beginWidth;
|
||||||
|
|
||||||
|
@Schema(description = "起点高")
|
||||||
|
private BigDecimal beginHigh;
|
||||||
|
|
||||||
|
@Schema(description = "终点宽")
|
||||||
|
private BigDecimal endWidth;
|
||||||
|
|
||||||
|
@Schema(description = "终点高")
|
||||||
|
private BigDecimal endHigh;
|
||||||
|
|
||||||
@Schema(description = "行走方法 0.直线 1.曲线")
|
@Schema(description = "行走方法 0.直线 1.曲线")
|
||||||
private Integer method;
|
private Integer method;
|
||||||
|
|
||||||
|
@ -94,6 +94,18 @@ public class PositionMapLineRespVO {
|
|||||||
@ExcelProperty("膨胀区域右")
|
@ExcelProperty("膨胀区域右")
|
||||||
private BigDecimal expansionZoneRight;
|
private BigDecimal expansionZoneRight;
|
||||||
|
|
||||||
|
@Schema(description = "起点宽")
|
||||||
|
private BigDecimal beginWidth;
|
||||||
|
|
||||||
|
@Schema(description = "起点高")
|
||||||
|
private BigDecimal beginHigh;
|
||||||
|
|
||||||
|
@Schema(description = "终点宽")
|
||||||
|
private BigDecimal endWidth;
|
||||||
|
|
||||||
|
@Schema(description = "终点高")
|
||||||
|
private BigDecimal endHigh;
|
||||||
|
|
||||||
@Schema(description = "行走方法 0.直线 1.曲线")
|
@Schema(description = "行走方法 0.直线 1.曲线")
|
||||||
@ExcelProperty("行走方法 0.直线 1.曲线")
|
@ExcelProperty("行走方法 0.直线 1.曲线")
|
||||||
private Integer method;
|
private Integer method;
|
||||||
|
@ -82,6 +82,18 @@ public class PositionMapLineSaveReqVO {
|
|||||||
@Schema(description = "膨胀区域右", example = "15890")
|
@Schema(description = "膨胀区域右", example = "15890")
|
||||||
private BigDecimal expansionZoneRight;
|
private BigDecimal expansionZoneRight;
|
||||||
|
|
||||||
|
@Schema(description = "起点宽")
|
||||||
|
private BigDecimal beginWidth;
|
||||||
|
|
||||||
|
@Schema(description = "起点高")
|
||||||
|
private BigDecimal beginHigh;
|
||||||
|
|
||||||
|
@Schema(description = "终点宽")
|
||||||
|
private BigDecimal endWidth;
|
||||||
|
|
||||||
|
@Schema(description = "终点高")
|
||||||
|
private BigDecimal endHigh;
|
||||||
|
|
||||||
@Schema(description = "行走方法 0.直线 1.曲线")
|
@Schema(description = "行走方法 0.直线 1.曲线")
|
||||||
private Integer method;
|
private Integer method;
|
||||||
|
|
||||||
|
@ -0,0 +1,26 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.controller.admin.robot.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设备状态数量信息
|
||||||
|
*
|
||||||
|
* @author 艾楷
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class DeviceStatusInfoVO {
|
||||||
|
|
||||||
|
@Schema(description = "设备类型")
|
||||||
|
private Integer deviceType;
|
||||||
|
|
||||||
|
@Schema(description = "总数量")
|
||||||
|
private Integer totalNum = 0;
|
||||||
|
|
||||||
|
@Schema(description = "正常数量")
|
||||||
|
private Integer normalNum = 0;
|
||||||
|
|
||||||
|
@Schema(description = "异常数量")
|
||||||
|
private Integer abnormalNum = 0;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.controller.admin.robot.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class RobotInfoStatusVO {
|
||||||
|
@Schema(description = "设备mac地址")
|
||||||
|
private String macAddress;
|
||||||
|
@Schema(description = "待命 0否 1是")
|
||||||
|
private Integer standby = 0;
|
||||||
|
@Schema(description = "任务中 0否 1是")
|
||||||
|
private Integer inTask = 0;
|
||||||
|
@Schema(description = "锁定 0否 1是")
|
||||||
|
private Integer doLock = 0;
|
||||||
|
@Schema(description = "离线 0否 1是")
|
||||||
|
private Integer offline = 0;
|
||||||
|
@Schema(description = "充电中 0否 1是")
|
||||||
|
private Integer charge = 0;
|
||||||
|
@Schema(description = "故障 0否 1是")
|
||||||
|
private Integer fault = 0;
|
||||||
|
}
|
@ -32,6 +32,7 @@ public class PositionMapItemDO extends BaseDO {
|
|||||||
/**
|
/**
|
||||||
* 库区id
|
* 库区id
|
||||||
*/
|
*/
|
||||||
|
@TableField(updateStrategy = FieldStrategy.IGNORED)
|
||||||
private Long areaId;
|
private Long areaId;
|
||||||
/**
|
/**
|
||||||
* 线库id
|
* 线库id
|
||||||
|
@ -122,6 +122,27 @@ public class PositionMapLineDO extends BaseDO {
|
|||||||
* 膨胀区域右
|
* 膨胀区域右
|
||||||
*/
|
*/
|
||||||
private BigDecimal expansionZoneRight;
|
private BigDecimal expansionZoneRight;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 起点宽
|
||||||
|
*/
|
||||||
|
private BigDecimal beginWidth;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 起点高
|
||||||
|
*/
|
||||||
|
private BigDecimal beginHigh;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 终点宽
|
||||||
|
*/
|
||||||
|
private BigDecimal endWidth;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 终点高
|
||||||
|
*/
|
||||||
|
private BigDecimal endHigh;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 行走方法 0.直线 1.曲线
|
* 行走方法 0.直线 1.曲线
|
||||||
*/
|
*/
|
||||||
|
@ -20,6 +20,7 @@ public interface WareHouseLaneMapper extends BaseMapperX<WareHouseLaneDO> {
|
|||||||
|
|
||||||
default PageResult<WareHouseLaneDO> selectPage(WareHouseLanePageReqVO reqVO) {
|
default PageResult<WareHouseLaneDO> selectPage(WareHouseLanePageReqVO reqVO) {
|
||||||
return selectPage(reqVO, new LambdaQueryWrapperX<WareHouseLaneDO>()
|
return selectPage(reqVO, new LambdaQueryWrapperX<WareHouseLaneDO>()
|
||||||
|
.eqIfPresent(WareHouseLaneDO::getPositionMapId, reqVO.getPositionMapId())
|
||||||
.likeIfPresent(WareHouseLaneDO::getLaneName, reqVO.getLaneName())
|
.likeIfPresent(WareHouseLaneDO::getLaneName, reqVO.getLaneName())
|
||||||
.eqIfPresent(WareHouseLaneDO::getLaneMsg, reqVO.getLaneMsg())
|
.eqIfPresent(WareHouseLaneDO::getLaneMsg, reqVO.getLaneMsg())
|
||||||
.betweenIfPresent(WareHouseLaneDO::getCreateTime, reqVO.getCreateTime())
|
.betweenIfPresent(WareHouseLaneDO::getCreateTime, reqVO.getCreateTime())
|
||||||
|
@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.mqtt.api.task.dto.Pose2ds;
|
|||||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemPageReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemPageReqVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -31,6 +32,7 @@ public interface PositionMapItemMapper extends BaseMapperX<PositionMapItemDO> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据库位id查询
|
* 根据库位id查询
|
||||||
|
*
|
||||||
* @param locationId
|
* @param locationId
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -38,8 +40,24 @@ public interface PositionMapItemMapper extends BaseMapperX<PositionMapItemDO> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据position_map_id 查询
|
* 根据position_map_id 查询
|
||||||
|
*
|
||||||
* @param positionMapId
|
* @param positionMapId
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<PositionMapItemSynDTO> getAllByMapId(Long positionMapId);
|
List<PositionMapItemSynDTO> getAllByMapId(Long positionMapId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将areaId设为空
|
||||||
|
*
|
||||||
|
* @param mapId
|
||||||
|
* @param areaId
|
||||||
|
*/
|
||||||
|
void emptyAreaId(@Param("mapId") Long mapId, @Param("areaId") Long areaId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将laneId设为空
|
||||||
|
* @param mapId
|
||||||
|
* @param laneId
|
||||||
|
*/
|
||||||
|
void emptyLaneId(@Param("mapId") Long mapId, @Param("laneId") Long laneId);
|
||||||
}
|
}
|
||||||
|
@ -14,10 +14,7 @@ import org.springframework.stereotype.Component;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class NodeProcessingContext {
|
public class NodeProcessingContext {
|
||||||
@ -57,18 +54,14 @@ public class NodeProcessingContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void processNodesByStrategy(Long positionMapId, List<PositionMapItemDO> oldItemList, int key, List<NodeBaseDTO> nodeBaseDTOS) {
|
public List<PositionMapItemDO> processNodesByStrategy(Long positionMapId, int key, List<NodeBaseDTO> nodeBaseDTOS) {
|
||||||
// -- 获取对应的策略 - 如果没有对应的直接 return
|
// -- 获取对应的策略 - 如果没有对应的直接 return
|
||||||
NodeProcessingStrategy strategy = strategyMap.get(key);
|
NodeProcessingStrategy strategy = strategyMap.get(key);
|
||||||
if (strategy == null) {
|
if (strategy == null) {
|
||||||
return;
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
// 策略模式 策略实现
|
// 策略模式 策略实现 - 组装好数据后返回给上一层
|
||||||
strategy.processNodes(positionMapId, nodeBaseDTOS);
|
strategy.processNodes(positionMapId, nodeBaseDTOS);
|
||||||
|
return BeanUtil.copyToList(nodeBaseDTOS, PositionMapItemDO.class);
|
||||||
List<PositionMapItemDO> newList = BeanUtil.copyToList(nodeBaseDTOS, PositionMapItemDO.class);
|
|
||||||
List<List<PositionMapItemDO>> list = CollectionUtils.compareLists(oldItemList, newList,
|
|
||||||
(oldVal, newVal) -> ObjectUtil.equal(oldVal.getId(), newVal.getId()));
|
|
||||||
positionMapItemService.batchSaveOrEditOrDel(positionMapId, list);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,8 @@ public class DeviceStrategyImpl implements NodeProcessingStrategy {
|
|||||||
// -- 策略3 处理设备点
|
// -- 策略3 处理设备点
|
||||||
// -- 将data里面的json 数据转为实体类 - 再对比节点id - 然后做新增删除修改操作
|
// -- 将data里面的json 数据转为实体类 - 再对比节点id - 然后做新增删除修改操作
|
||||||
List<DeviceInformationDO> newList = new ArrayList<>();
|
List<DeviceInformationDO> newList = new ArrayList<>();
|
||||||
|
// -- 拿到这个地图所绑定的设备 -
|
||||||
|
List<DeviceInformationDO> oldList = deviceInformationService.getDeviceInfoBindByMapId(positionMapId);
|
||||||
nodeBaseDTOS.forEach(item -> {
|
nodeBaseDTOS.forEach(item -> {
|
||||||
if (item.getId() == null) {
|
if (item.getId() == null) {
|
||||||
item.setId(getId());
|
item.setId(getId());
|
||||||
@ -34,16 +36,14 @@ public class DeviceStrategyImpl implements NodeProcessingStrategy {
|
|||||||
deviceInformationDO.setLocationY(item.getLocationY());
|
deviceInformationDO.setLocationY(item.getLocationY());
|
||||||
deviceInformationDO.setActualLocationX(item.getActualLocationX());
|
deviceInformationDO.setActualLocationX(item.getActualLocationX());
|
||||||
deviceInformationDO.setActualLocationY(item.getActualLocationY());
|
deviceInformationDO.setActualLocationY(item.getActualLocationY());
|
||||||
|
|
||||||
deviceInformationDO.setPositionMapId(positionMapId);
|
deviceInformationDO.setPositionMapId(positionMapId);
|
||||||
deviceInformationDO.setPositionMapItemId(item.getId());
|
deviceInformationDO.setPositionMapItemId(item.getId());
|
||||||
newList.add(deviceInformationDO);
|
newList.add(deviceInformationDO);
|
||||||
item.setDataJson(JSONUtil.toJsonStr(deviceInformationDO));
|
item.setDataJson(JSONUtil.toJsonStr(deviceInformationDO));
|
||||||
});
|
});
|
||||||
|
|
||||||
List<DeviceInformationDO> oldList = deviceInformationService.getByMapId(positionMapId);
|
|
||||||
List<List<DeviceInformationDO>> list = CollectionUtils.compareLists(oldList, newList,
|
List<List<DeviceInformationDO>> list = CollectionUtils.compareLists(oldList, newList,
|
||||||
(oldVal, newVal) -> ObjectUtil.equal(oldVal.getId(), newVal.getId()));
|
(oldVal, newVal) -> ObjectUtil.equal(oldVal.getId(), newVal.getId()));
|
||||||
deviceInformationService.batchSaveOrEditOrDel(positionMapId, list);
|
deviceInformationService.batchEditOrDel(list);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.system.service.bulletinboard;
|
package cn.iocoder.yudao.module.system.service.bulletinboard;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
@ -9,11 +10,15 @@ import cn.iocoder.yudao.module.system.constant.robot.RobotTaskChcheConstant;
|
|||||||
import cn.iocoder.yudao.module.system.controller.admin.bulletinboard.vo.BulletinBoardVO;
|
import cn.iocoder.yudao.module.system.controller.admin.bulletinboard.vo.BulletinBoardVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.bulletinboard.vo.RobotElectricityLevelVO;
|
import cn.iocoder.yudao.module.system.controller.admin.bulletinboard.vo.RobotElectricityLevelVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.bulletinboard.vo.TaskStatusVO;
|
import cn.iocoder.yudao.module.system.controller.admin.bulletinboard.vo.TaskStatusVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.DeviceStatusInfoVO;
|
||||||
|
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInfoStatusVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInformationStatisticsVO;
|
import cn.iocoder.yudao.module.system.controller.admin.robot.vo.RobotInformationStatisticsVO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.information.DeviceInformationDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotInformationDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotTaskDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnMsgDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.robot.RobotWarnMsgDO;
|
||||||
import cn.iocoder.yudao.module.system.enums.robot.RobotTaskDetailStatusEnum;
|
import cn.iocoder.yudao.module.system.enums.robot.RobotTaskDetailStatusEnum;
|
||||||
|
import cn.iocoder.yudao.module.system.service.information.DeviceInformationService;
|
||||||
import cn.iocoder.yudao.module.system.service.robot.RobotInformationService;
|
import cn.iocoder.yudao.module.system.service.robot.RobotInformationService;
|
||||||
import cn.iocoder.yudao.module.system.service.robot.RobotTaskService;
|
import cn.iocoder.yudao.module.system.service.robot.RobotTaskService;
|
||||||
import cn.iocoder.yudao.module.system.service.robot.RobotWarnMsgService;
|
import cn.iocoder.yudao.module.system.service.robot.RobotWarnMsgService;
|
||||||
@ -26,6 +31,7 @@ import java.time.LocalDateTime;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -44,6 +50,8 @@ public class BulletinBoardServiceImpl implements BulletinBoardService {
|
|||||||
private RobotInformationService robotInformationService;
|
private RobotInformationService robotInformationService;
|
||||||
@Resource
|
@Resource
|
||||||
private RedisUtil redisUtil;
|
private RedisUtil redisUtil;
|
||||||
|
@Resource
|
||||||
|
private DeviceInformationService deviceInformationService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BulletinBoardVO getBulletinBoard() {
|
public BulletinBoardVO getBulletinBoard() {
|
||||||
@ -94,21 +102,49 @@ public class BulletinBoardServiceImpl implements BulletinBoardService {
|
|||||||
vo.setStatistics(statisticsVO);
|
vo.setStatistics(statisticsVO);
|
||||||
// 车辆异常信息
|
// 车辆异常信息
|
||||||
vo.setRobotWarnMsgDOS(robotWarnMsgDOS);
|
vo.setRobotWarnMsgDOS(robotWarnMsgDOS);
|
||||||
|
|
||||||
List<RobotElectricityLevelVO> robotElectricityLevelVOS = new ArrayList<>();
|
List<RobotElectricityLevelVO> robotElectricityLevelVOS = new ArrayList<>();
|
||||||
List<RobotInformationDO> allRobot = robotInformationService.getAllRobot();
|
List<RobotInformationDO> allRobot = robotInformationService.getAllRobot();
|
||||||
|
List<RobotInfoStatusVO> agvListStatusInfo = robotInformationService.getAGVListStatusInfo();
|
||||||
|
Map<String, RobotInfoStatusVO> map = agvListStatusInfo.stream().collect(Collectors.toMap(RobotInfoStatusVO::getMacAddress, Function.identity()));
|
||||||
for (RobotInformationDO robotInformationDO : allRobot) {
|
for (RobotInformationDO robotInformationDO : allRobot) {
|
||||||
String pose2dKey = RobotTaskChcheConstant.ROBOT_INFORMATION_POSE_BAT_SOC + robotInformationDO.getMacAddress();
|
String pose2dKey = RobotTaskChcheConstant.ROBOT_INFORMATION_POSE_BAT_SOC + robotInformationDO.getMacAddress();
|
||||||
Object object = redisUtil.get(pose2dKey);
|
Object object = redisUtil.get(pose2dKey);
|
||||||
RobotStatusDataPoseDTO robotStatusDataPoseDTO = JSONUtil.toBean((String) object, RobotStatusDataPoseDTO.class);
|
RobotStatusDataPoseDTO robotStatusDataPoseDTO = JSONUtil.toBean((String) object, RobotStatusDataPoseDTO.class);
|
||||||
if (robotStatusDataPoseDTO != null) {
|
if (robotStatusDataPoseDTO != null) {
|
||||||
RobotElectricityLevelVO robotElectricityLevelVO = new RobotElectricityLevelVO();
|
RobotElectricityLevelVO robotElectricityLevelVO = new RobotElectricityLevelVO();
|
||||||
|
//todo 这里缺少一个状态
|
||||||
|
RobotInfoStatusVO item = map.get(robotInformationDO.getMacAddress());
|
||||||
|
if (item != null) {
|
||||||
|
BeanUtil.copyProperties(item, robotElectricityLevelVO);
|
||||||
|
}
|
||||||
robotElectricityLevelVO.setRobotNo(robotInformationDO.getRobotNo());
|
robotElectricityLevelVO.setRobotNo(robotInformationDO.getRobotNo());
|
||||||
robotElectricityLevelVO.setBatSoc(robotStatusDataPoseDTO.getBat_soc());
|
robotElectricityLevelVO.setBatSoc(robotStatusDataPoseDTO.getBat_soc());
|
||||||
robotElectricityLevelVOS.add(robotElectricityLevelVO);
|
robotElectricityLevelVOS.add(robotElectricityLevelVO);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
vo.setRobotElectricityLevelVOS(robotElectricityLevelVOS);
|
||||||
|
// - 获取所有设备
|
||||||
|
List<DeviceInformationDO> deviceInformationDOS = deviceInformationService.list();
|
||||||
|
//根据设备类型分组
|
||||||
|
Map<Integer, List<DeviceInformationDO>> deviceMap = deviceInformationDOS.stream().collect(Collectors.groupingBy(DeviceInformationDO::getDeviceType));
|
||||||
|
List<DeviceStatusInfoVO> deviceStatusInfoVOS = new ArrayList<>();
|
||||||
|
for (Map.Entry<Integer, List<DeviceInformationDO>> entry : deviceMap.entrySet()) {
|
||||||
|
Integer deviceType = entry.getKey();
|
||||||
|
DeviceStatusInfoVO deviceStatusInfoVO = new DeviceStatusInfoVO();
|
||||||
|
deviceStatusInfoVO.setDeviceType(deviceType);
|
||||||
|
List<DeviceInformationDO> deviceInformationDOList = entry.getValue();
|
||||||
|
if (CollectionUtil.isEmpty(deviceInformationDOList)) {
|
||||||
|
deviceStatusInfoVOS.add(deviceStatusInfoVO);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
deviceStatusInfoVO.setTotalNum(deviceInformationDOList.size());
|
||||||
|
long count = deviceInformationDOList.stream().filter(a -> a.getDeviceStatus().equals(3)).count();
|
||||||
|
deviceStatusInfoVO.setNormalNum((int) count);
|
||||||
|
deviceStatusInfoVO.setAbnormalNum(deviceStatusInfoVO.getTotalNum() - deviceStatusInfoVO.getNormalNum());
|
||||||
|
deviceStatusInfoVOS.add(deviceStatusInfoVO);
|
||||||
|
}
|
||||||
|
vo.setDeviceStatusInfoVOS(deviceStatusInfoVOS);
|
||||||
|
return vo;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
|||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
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.dict.vo.data.DictDataPageReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataPageReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataSaveReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.dict.vo.data.DictDataSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO;
|
||||||
@ -171,7 +172,9 @@ public class DictDataServiceImpl implements DictDataService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<DictDataDO> getDictDataListByDictType(String dictType) {
|
public List<DictDataDO> getDictDataListByDictType(String dictType) {
|
||||||
List<DictDataDO> list = dictDataMapper.selectList(DictDataDO::getDictType, dictType);
|
List<DictDataDO> list = dictDataMapper.selectList(new LambdaQueryWrapperX<DictDataDO>()
|
||||||
|
.eq(DictDataDO::getDictType, dictType)
|
||||||
|
.eq(DictDataDO::getStatus, CommonStatusEnum.ENABLE.getStatus()));
|
||||||
list.sort(Comparator.comparing(DictDataDO::getSort));
|
list.sort(Comparator.comparing(DictDataDO::getSort));
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|||||||
import cn.iocoder.yudao.module.system.controller.admin.housearea.vo.HouseAreaPageReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.housearea.vo.HouseAreaPageReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.housearea.vo.HouseAreaSaveReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.housearea.vo.HouseAreaSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.housearea.HouseAreaDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.housearea.HouseAreaDO;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -13,7 +14,7 @@ import java.util.List;
|
|||||||
*
|
*
|
||||||
* @author 陈宾顺
|
* @author 陈宾顺
|
||||||
*/
|
*/
|
||||||
public interface HouseAreaService {
|
public interface HouseAreaService extends IService<HouseAreaDO> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建库区
|
* 创建库区
|
||||||
@ -62,7 +63,15 @@ public interface HouseAreaService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得全部库区
|
* 获得全部库区
|
||||||
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<HouseAreaDO> getHouseAreaList(Long positionMapId);
|
List<HouseAreaDO> getHouseAreaList(Long positionMapId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除库区
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
void delete(Long id);
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,9 @@ import cn.iocoder.yudao.module.system.dal.mysql.housearea.HouseAreaMapper;
|
|||||||
import cn.iocoder.yudao.module.system.service.houselocation.HouseLocationService;
|
import cn.iocoder.yudao.module.system.service.houselocation.HouseLocationService;
|
||||||
import cn.iocoder.yudao.module.system.service.positionmap.PositionMapItemService;
|
import cn.iocoder.yudao.module.system.service.positionmap.PositionMapItemService;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
@ -38,7 +40,7 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.THERE_ARE_
|
|||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
@Validated
|
@Validated
|
||||||
public class HouseAreaServiceImpl implements HouseAreaService {
|
public class HouseAreaServiceImpl extends ServiceImpl<HouseAreaMapper, HouseAreaDO> implements HouseAreaService {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private HouseAreaMapper houseAreaMapper;
|
private HouseAreaMapper houseAreaMapper;
|
||||||
@ -66,6 +68,7 @@ public class HouseAreaServiceImpl implements HouseAreaService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void deleteHouseArea(Long id) {
|
public void deleteHouseArea(Long id) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validateHouseAreaExists(id);
|
validateHouseAreaExists(id);
|
||||||
@ -90,6 +93,7 @@ public class HouseAreaServiceImpl implements HouseAreaService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void createOrEditOrDel(HouseAreaSaveReqVO createReqVO) {
|
public void createOrEditOrDel(HouseAreaSaveReqVO createReqVO) {
|
||||||
HouseAreaDO houseArea = BeanUtil.copyProperties(createReqVO, HouseAreaDO.class);
|
HouseAreaDO houseArea = BeanUtil.copyProperties(createReqVO, HouseAreaDO.class);
|
||||||
houseAreaMapper.insertOrUpdate(houseArea);
|
houseAreaMapper.insertOrUpdate(houseArea);
|
||||||
@ -162,4 +166,14 @@ public class HouseAreaServiceImpl implements HouseAreaService {
|
|||||||
.orderByAsc(HouseAreaDO::getId));
|
.orderByAsc(HouseAreaDO::getId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void delete(Long id) {
|
||||||
|
HouseAreaDO areaDO = this.getById(id);
|
||||||
|
this.removeById(id);
|
||||||
|
//获取当前库区所对应的地图
|
||||||
|
// 点位中包含库区id的数据设为null
|
||||||
|
positionMapItemService.emptyAreaId(areaDO.getPositionMapId(), id);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -39,4 +39,9 @@ public interface WareHouseLaneService extends IService<WareHouseLaneDO> {
|
|||||||
*/
|
*/
|
||||||
void createOrEditOrDel(@Valid WareHouseLaneSaveReqVO createReqVO);
|
void createOrEditOrDel(@Valid WareHouseLaneSaveReqVO createReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除线库
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
void delete(Long id);
|
||||||
}
|
}
|
||||||
|
@ -7,9 +7,11 @@ import cn.hutool.json.JSONUtil;
|
|||||||
import cn.iocoder.yudao.framework.common.enums.NodeTypeEnum;
|
import cn.iocoder.yudao.framework.common.enums.NodeTypeEnum;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||||
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.houselane.vo.WareHouseLanePageReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.houselane.vo.WareHouseLanePageReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.houselane.vo.WareHouseLaneSaveReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.houselane.vo.WareHouseLaneSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.PositionMapConditionDTO;
|
import cn.iocoder.yudao.module.system.controller.admin.positionmap.dto.PositionMapConditionDTO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.housearea.HouseAreaDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.houselane.WareHouseLaneDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.houselane.WareHouseLaneDO;
|
||||||
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.dal.dataobject.positionmap.PositionMapItemDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO;
|
||||||
@ -142,4 +144,13 @@ public class WareHouseLaneServiceImpl extends ServiceImpl<WareHouseLaneMapper, W
|
|||||||
houseLocationService.updateBatchById(wareHouseLocationList);
|
houseLocationService.updateBatchById(wareHouseLocationList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void delete(Long id) {
|
||||||
|
WareHouseLaneDO wareHouseLaneDO = this.getById(id);
|
||||||
|
this.removeById(id);
|
||||||
|
// 点位中包含线库id的数据设为null
|
||||||
|
positionMapItemService.emptyLaneId(wareHouseLaneDO.getPositionMapId(), id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,7 @@ import cn.iocoder.yudao.module.system.dal.mysql.houselocation.WareHouseLocationM
|
|||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
@ -35,6 +36,7 @@ public class HouseLocationServiceImpl extends ServiceImpl<WareHouseLocationMappe
|
|||||||
private WareHouseLocationMapper houseLocationMapper;
|
private WareHouseLocationMapper houseLocationMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Long createHouseLocation(WareHouseLocationSaveReqVO createReqVO) {
|
public Long createHouseLocation(WareHouseLocationSaveReqVO createReqVO) {
|
||||||
// 插入
|
// 插入
|
||||||
WareHouseLocationDO houseLocation = BeanUtils.toBean(createReqVO, WareHouseLocationDO.class);
|
WareHouseLocationDO houseLocation = BeanUtils.toBean(createReqVO, WareHouseLocationDO.class);
|
||||||
@ -44,6 +46,7 @@ public class HouseLocationServiceImpl extends ServiceImpl<WareHouseLocationMappe
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void updateHouseLocation(WareHouseLocationSaveReqVO updateReqVO) {
|
public void updateHouseLocation(WareHouseLocationSaveReqVO updateReqVO) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validateHouseLocationExists(updateReqVO.getId());
|
validateHouseLocationExists(updateReqVO.getId());
|
||||||
@ -53,6 +56,7 @@ public class HouseLocationServiceImpl extends ServiceImpl<WareHouseLocationMappe
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void deleteHouseLocation(Long id) {
|
public void deleteHouseLocation(Long id) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validateHouseLocationExists(id);
|
validateHouseLocationExists(id);
|
||||||
@ -89,6 +93,7 @@ public class HouseLocationServiceImpl extends ServiceImpl<WareHouseLocationMappe
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void batchSaveOrEditOrDel(Long positionMapId, List<List<WareHouseLocationDO>> list) {
|
public void batchSaveOrEditOrDel(Long positionMapId, List<List<WareHouseLocationDO>> list) {
|
||||||
//批量添加、修改、删除
|
//批量添加、修改、删除
|
||||||
if (isNotEmpty(list.get(0))) {
|
if (isNotEmpty(list.get(0))) {
|
||||||
|
@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.system.controller.admin.information.dto.Statistic
|
|||||||
import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationPageReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationPageReqVO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationSaveReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.information.DeviceInformationDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.information.DeviceInformationDO;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -17,7 +18,7 @@ import java.util.Map;
|
|||||||
*
|
*
|
||||||
* @author 陈宾顺
|
* @author 陈宾顺
|
||||||
*/
|
*/
|
||||||
public interface DeviceInformationService {
|
public interface DeviceInformationService extends IService<DeviceInformationDO> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建设备信息
|
* 创建设备信息
|
||||||
@ -60,10 +61,9 @@ public interface DeviceInformationService {
|
|||||||
/**
|
/**
|
||||||
* 批量新增删除修改
|
* 批量新增删除修改
|
||||||
*
|
*
|
||||||
* @param positionMapId
|
|
||||||
* @param list
|
* @param list
|
||||||
*/
|
*/
|
||||||
void batchSaveOrEditOrDel(Long positionMapId, List<List<DeviceInformationDO>> list);
|
void batchEditOrDel(List<List<DeviceInformationDO>> list);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过地图id获取设备列表
|
* 通过地图id获取设备列表
|
||||||
@ -90,20 +90,31 @@ public interface DeviceInformationService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得设备信息分类列表
|
* 获得设备信息分类列表
|
||||||
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
Map<Integer, List<DeviceInformationDO>> classification();
|
Map<Integer, List<DeviceInformationDO>> classification();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 统计设备
|
* 统计设备
|
||||||
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<StatisticsInformationDTO> getDeviceNumber();
|
List<StatisticsInformationDTO> getDeviceNumber();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查看全部设备
|
* 查看全部设备
|
||||||
|
*
|
||||||
* @param pageReqVO
|
* @param pageReqVO
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<DeviceInformationDO> getInformationList(@Valid DeviceInformationPageReqVO pageReqVO);
|
List<DeviceInformationDO> getInformationList(@Valid DeviceInformationPageReqVO pageReqVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取设备信息 通过地图id - 并且设备有绑定具体点位 即点位id不为空
|
||||||
|
*
|
||||||
|
* @param positionMapId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<DeviceInformationDO> getDeviceInfoBindByMapId(Long positionMapId);
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,6 @@ import cn.hutool.core.util.ObjectUtil;
|
|||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||||
import cn.iocoder.yudao.module.grpc.api.GrpcServiceApi;
|
|
||||||
import cn.iocoder.yudao.module.system.constant.device.DeviceChcheConstant;
|
import cn.iocoder.yudao.module.system.constant.device.DeviceChcheConstant;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.information.dto.DeviceInformationDTO;
|
import cn.iocoder.yudao.module.system.controller.admin.information.dto.DeviceInformationDTO;
|
||||||
import cn.iocoder.yudao.module.system.controller.admin.information.dto.MapBindDeviceInfoDTO;
|
import cn.iocoder.yudao.module.system.controller.admin.information.dto.MapBindDeviceInfoDTO;
|
||||||
@ -13,13 +12,13 @@ import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInfo
|
|||||||
import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationSaveReqVO;
|
import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationSaveReqVO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.dataobject.information.DeviceInformationDO;
|
import cn.iocoder.yudao.module.system.dal.dataobject.information.DeviceInformationDO;
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.config.CommonConfigMapper;
|
|
||||||
import cn.iocoder.yudao.module.system.dal.mysql.information.DeviceInformationMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.information.DeviceInformationMapper;
|
||||||
import cn.iocoder.yudao.module.system.enums.device.DeviceStatusEnum;
|
import cn.iocoder.yudao.module.system.enums.device.DeviceStatusEnum;
|
||||||
import cn.iocoder.yudao.module.system.enums.device.PictureConfigEnum;
|
import cn.iocoder.yudao.module.system.enums.device.PictureConfigEnum;
|
||||||
import cn.iocoder.yudao.module.system.service.dict.DictDataService;
|
import cn.iocoder.yudao.module.system.service.dict.DictDataService;
|
||||||
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
import cn.iocoder.yudao.module.system.util.redis.RedisUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
@ -33,7 +32,6 @@ import java.util.stream.Collectors;
|
|||||||
|
|
||||||
import static cn.hutool.core.collection.CollUtil.isNotEmpty;
|
import static cn.hutool.core.collection.CollUtil.isNotEmpty;
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
|
|
||||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.INFORMATION_MAC_EXIST;
|
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.INFORMATION_MAC_EXIST;
|
||||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.INFORMATION_NOT_EXISTS;
|
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.INFORMATION_NOT_EXISTS;
|
||||||
|
|
||||||
@ -45,7 +43,7 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.INFORMATIO
|
|||||||
@Service
|
@Service
|
||||||
@Validated
|
@Validated
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class DeviceInformationServiceImpl implements DeviceInformationService {
|
public class DeviceInformationServiceImpl extends ServiceImpl<DeviceInformationMapper, DeviceInformationDO> implements DeviceInformationService {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private DeviceInformationMapper informationMapper;
|
private DeviceInformationMapper informationMapper;
|
||||||
@ -53,18 +51,14 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
|
|||||||
@Resource
|
@Resource
|
||||||
private DictDataService dictDataService;
|
private DictDataService dictDataService;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private GrpcServiceApi grpcServiceApi;
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private RedisUtil redisUtil;
|
private RedisUtil redisUtil;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createInformation(DeviceInformationSaveReqVO createReqVO) {
|
public Long createInformation(DeviceInformationSaveReqVO createReqVO) {
|
||||||
DeviceInformationPageReqVO pageReqVO = new DeviceInformationPageReqVO();
|
// -- 先判断库里是否有相通的mac地址数据
|
||||||
pageReqVO.setMacAddress(createReqVO.getMacAddress());
|
long count = this.count(new LambdaQueryWrapper<DeviceInformationDO>().eq(DeviceInformationDO::getMacAddress, createReqVO.getMacAddress()));
|
||||||
PageResult<DeviceInformationDO> pageResult = informationMapper.selectPage(pageReqVO);
|
if (count > 0L) {
|
||||||
if (ObjectUtil.isNotEmpty(pageResult.getList())) {
|
|
||||||
throw exception(INFORMATION_MAC_EXIST);
|
throw exception(INFORMATION_MAC_EXIST);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,7 +108,7 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
|
|||||||
// 校验存在
|
// 校验存在
|
||||||
validateInformationExists(id);
|
validateInformationExists(id);
|
||||||
DeviceInformationDO deviceInformationDO = informationMapper.selectById(id);
|
DeviceInformationDO deviceInformationDO = informationMapper.selectById(id);
|
||||||
String deviceKey = DeviceChcheConstant.DEVICE_LAST_TIME +deviceInformationDO.getMacAddress();
|
String deviceKey = DeviceChcheConstant.DEVICE_LAST_TIME + deviceInformationDO.getMacAddress();
|
||||||
Object object = redisUtil.get(deviceKey);
|
Object object = redisUtil.get(deviceKey);
|
||||||
if (ObjectUtil.isEmpty(object)) {
|
if (ObjectUtil.isEmpty(object)) {
|
||||||
deviceInformationDO.setDeviceStatus(DeviceStatusEnum.OFF_LINE.getType());
|
deviceInformationDO.setDeviceStatus(DeviceStatusEnum.OFF_LINE.getType());
|
||||||
@ -122,11 +116,11 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||||
LocalDateTime curTimeLDT = LocalDateTime.parse((String)object, df);
|
LocalDateTime curTimeLDT = LocalDateTime.parse((String) object, df);
|
||||||
deviceInformationDO.setDeviceLastTime(curTimeLDT);
|
deviceInformationDO.setDeviceLastTime(curTimeLDT);
|
||||||
deviceInformationDO.setDeviceStatus(DeviceStatusEnum.ON_LINE.getType());
|
deviceInformationDO.setDeviceStatus(DeviceStatusEnum.ON_LINE.getType());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.info("查询设备最后通讯时间异常 :{}",e.getMessage());
|
log.info("查询设备最后通讯时间异常 :{}", e.getMessage());
|
||||||
}
|
}
|
||||||
return deviceInformationDO;
|
return deviceInformationDO;
|
||||||
}
|
}
|
||||||
@ -138,16 +132,19 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void batchSaveOrEditOrDel(Long positionMapId, List<List<DeviceInformationDO>> list) {
|
public void batchEditOrDel(List<List<DeviceInformationDO>> list) {
|
||||||
//批量添加、修改、删除
|
//批量添加、修改、删除
|
||||||
if (isNotEmpty(list.get(0))) {
|
List<DeviceInformationDO> editList = new ArrayList<>();
|
||||||
informationMapper.insertBatch(list.get(0));
|
if (isNotEmpty(list.get(0)) || isNotEmpty(list.get(1))) {
|
||||||
}
|
editList.addAll(list.get(0));
|
||||||
if (isNotEmpty(list.get(1))) {
|
editList.addAll(list.get(1));
|
||||||
informationMapper.updateBatch(list.get(1));
|
|
||||||
}
|
}
|
||||||
if (isNotEmpty(list.get(2))) {
|
if (isNotEmpty(list.get(2))) {
|
||||||
informationMapper.deleteByIds(convertList(list.get(2), DeviceInformationDO::getId));
|
list.get(2).forEach(a -> a.setPositionMapItemId(null));
|
||||||
|
editList.addAll(list.get(2));
|
||||||
|
}
|
||||||
|
if (isNotEmpty(editList)){
|
||||||
|
informationMapper.updateBatch(editList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -170,6 +167,7 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得设备信息分类列表
|
* 获得设备信息分类列表
|
||||||
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@ -181,7 +179,7 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
|
|||||||
|
|
||||||
// todo 需要设置设备通讯的时间
|
// todo 需要设置设备通讯的时间
|
||||||
for (DeviceInformationDO deviceInformationDO : deviceInformationDOS) {
|
for (DeviceInformationDO deviceInformationDO : deviceInformationDOS) {
|
||||||
String deviceKey = DeviceChcheConstant.DEVICE_LAST_TIME +deviceInformationDO.getMacAddress();
|
String deviceKey = DeviceChcheConstant.DEVICE_LAST_TIME + deviceInformationDO.getMacAddress();
|
||||||
Object object = redisUtil.get(deviceKey);
|
Object object = redisUtil.get(deviceKey);
|
||||||
if (ObjectUtil.isEmpty(object)) {
|
if (ObjectUtil.isEmpty(object)) {
|
||||||
deviceInformationDO.setDeviceStatus(DeviceStatusEnum.OFF_LINE.getType());
|
deviceInformationDO.setDeviceStatus(DeviceStatusEnum.OFF_LINE.getType());
|
||||||
@ -189,11 +187,11 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||||
LocalDateTime curTimeLDT = LocalDateTime.parse((String)object, df);
|
LocalDateTime curTimeLDT = LocalDateTime.parse((String) object, df);
|
||||||
deviceInformationDO.setDeviceLastTime(curTimeLDT);
|
deviceInformationDO.setDeviceLastTime(curTimeLDT);
|
||||||
deviceInformationDO.setDeviceStatus(DeviceStatusEnum.ON_LINE.getType());
|
deviceInformationDO.setDeviceStatus(DeviceStatusEnum.ON_LINE.getType());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.info("查询设备最后通讯时间异常 :{}",e.getMessage());
|
log.info("查询设备最后通讯时间异常 :{}", e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -202,8 +200,8 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
|
|||||||
.collect(Collectors.groupingBy(DeviceInformationDO::getDeviceType));
|
.collect(Collectors.groupingBy(DeviceInformationDO::getDeviceType));
|
||||||
|
|
||||||
ArrayList<Map.Entry<Integer, List<DeviceInformationDO>>> list = new ArrayList<Map.Entry<Integer, List<DeviceInformationDO>>>(collect.entrySet());
|
ArrayList<Map.Entry<Integer, List<DeviceInformationDO>>> list = new ArrayList<Map.Entry<Integer, List<DeviceInformationDO>>>(collect.entrySet());
|
||||||
Collections.sort(list, new Comparator<Map.Entry<Integer, List<DeviceInformationDO>>>() {
|
Collections.sort(list, new Comparator<Map.Entry<Integer, List<DeviceInformationDO>>>() {
|
||||||
public int compare(Map.Entry<Integer, List<DeviceInformationDO>> o1, Map.Entry<Integer, List<DeviceInformationDO>> o2) {
|
public int compare(Map.Entry<Integer, List<DeviceInformationDO>> o1, Map.Entry<Integer, List<DeviceInformationDO>> o2) {
|
||||||
return o1.getKey().compareTo(o2.getKey()); // 按照值排序
|
return o1.getKey().compareTo(o2.getKey()); // 按照值排序
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -213,6 +211,7 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 统计设备
|
* 统计设备
|
||||||
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@ -252,7 +251,7 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
|
|||||||
|
|
||||||
// todo 需要设置设备通讯的时间
|
// todo 需要设置设备通讯的时间
|
||||||
for (DeviceInformationDO deviceInformationDO : deviceInformationDOS) {
|
for (DeviceInformationDO deviceInformationDO : deviceInformationDOS) {
|
||||||
String deviceKey = DeviceChcheConstant.DEVICE_LAST_TIME +deviceInformationDO.getMacAddress();
|
String deviceKey = DeviceChcheConstant.DEVICE_LAST_TIME + deviceInformationDO.getMacAddress();
|
||||||
Object object = redisUtil.get(deviceKey);
|
Object object = redisUtil.get(deviceKey);
|
||||||
if (ObjectUtil.isEmpty(object)) {
|
if (ObjectUtil.isEmpty(object)) {
|
||||||
deviceInformationDO.setDeviceStatus(DeviceStatusEnum.OFF_LINE.getType());
|
deviceInformationDO.setDeviceStatus(DeviceStatusEnum.OFF_LINE.getType());
|
||||||
@ -260,17 +259,24 @@ public class DeviceInformationServiceImpl implements DeviceInformationService {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||||
LocalDateTime curTimeLDT = LocalDateTime.parse((String)object, df);
|
LocalDateTime curTimeLDT = LocalDateTime.parse((String) object, df);
|
||||||
deviceInformationDO.setDeviceLastTime(curTimeLDT);
|
deviceInformationDO.setDeviceLastTime(curTimeLDT);
|
||||||
deviceInformationDO.setDeviceStatus(DeviceStatusEnum.ON_LINE.getType());
|
deviceInformationDO.setDeviceStatus(DeviceStatusEnum.ON_LINE.getType());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.info("查询设备最后通讯时间异常 :{}",e.getMessage());
|
log.info("查询设备最后通讯时间异常 :{}", e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return deviceInformationDOS;
|
return deviceInformationDOS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<DeviceInformationDO> getDeviceInfoBindByMapId(Long positionMapId) {
|
||||||
|
return informationMapper.selectList(new LambdaQueryWrapperX<DeviceInformationDO>()
|
||||||
|
.eq(DeviceInformationDO::getPositionMapId, positionMapId)
|
||||||
|
.isNotNull(DeviceInformationDO::getPositionMapItemId));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mapBindDeviceInfo(MapBindDeviceInfoDTO dto) {
|
public void mapBindDeviceInfo(MapBindDeviceInfoDTO dto) {
|
||||||
DeviceInformationDO deviceInformationDO = informationMapper.selectById(dto.getDeviceInfoId());
|
DeviceInformationDO deviceInformationDO = informationMapper.selectById(dto.getDeviceInfoId());
|
||||||
|
@ -77,4 +77,19 @@ public interface PositionMapItemService extends IService<PositionMapItemDO> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<PositionMapItemDO> getByCondition(PositionMapConditionDTO positionMapConditionDTO);
|
List<PositionMapItemDO> getByCondition(PositionMapConditionDTO positionMapConditionDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 清空areaId
|
||||||
|
*
|
||||||
|
* @param mapId
|
||||||
|
* @param areaId
|
||||||
|
*/
|
||||||
|
void emptyAreaId(Long mapId, Long areaId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 清空laneId
|
||||||
|
* @param mapId
|
||||||
|
* @param laneId
|
||||||
|
*/
|
||||||
|
void emptyLaneId(Long mapId, Long laneId);
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItem
|
|||||||
import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapItemMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapItemMapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
@ -69,6 +70,7 @@ public class PositionMapItemServiceImpl extends ServiceImpl<PositionMapItemMappe
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void batchSaveOrEditOrDel(Long positionMapId, List<List<PositionMapItemDO>> list) {
|
public void batchSaveOrEditOrDel(Long positionMapId, List<List<PositionMapItemDO>> list) {
|
||||||
//批量添加、修改、删除
|
//批量添加、修改、删除
|
||||||
if (isNotEmpty(list.get(0))) {
|
if (isNotEmpty(list.get(0))) {
|
||||||
@ -95,5 +97,15 @@ public class PositionMapItemServiceImpl extends ServiceImpl<PositionMapItemMappe
|
|||||||
.eqIfPresent(PositionMapItemDO::getLaneId, dto.getLaneId()));
|
.eqIfPresent(PositionMapItemDO::getLaneId, dto.getLaneId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void emptyAreaId(Long positionMapId, Long areaId) {
|
||||||
|
positionMapItemMapper.emptyAreaId(positionMapId, areaId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void emptyLaneId(Long mapId, Long laneId) {
|
||||||
|
positionMapItemMapper.emptyLaneId(mapId, laneId);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -63,6 +63,12 @@ public interface RobotInformationService extends IService<RobotInformationDO> {
|
|||||||
*/
|
*/
|
||||||
RobotInformationStatisticsVO statisticsInformation();
|
RobotInformationStatisticsVO statisticsInformation();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有AGV状态
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<RobotInfoStatusVO> getAGVListStatusInfo();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询能正常使用的车辆
|
* 查询能正常使用的车辆
|
||||||
*
|
*
|
||||||
|
@ -335,6 +335,48 @@ public class RobotInformationServiceImpl extends ServiceImpl<RobotInformationMap
|
|||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<RobotInfoStatusVO> getAGVListStatusInfo() {
|
||||||
|
List<RobotInfoStatusVO> list = new ArrayList<>();
|
||||||
|
// -- 先从缓存中 获取AGV状态信息 - 如果没有的话 - 再从数据库中获取 - 并且缓存到redis中
|
||||||
|
List<RobotInformationDO> robotInformationDO = informationMapper.selectList();
|
||||||
|
if (robotInformationDO == null) {
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
for (RobotInformationDO informationDO : robotInformationDO) {
|
||||||
|
RobotInfoStatusVO vo = new RobotInfoStatusVO();
|
||||||
|
//0:待命、1:任务中、2:锁定、3:离线、4:充电中、5:故障
|
||||||
|
String pose2dKey = RobotTaskChcheConstant.ROBOT_INFORMATION_POSE_BAT_SOC + informationDO.getMacAddress();
|
||||||
|
Object object = redisUtil.get(pose2dKey);
|
||||||
|
if (ObjectUtil.isEmpty(object)) {
|
||||||
|
//离线
|
||||||
|
vo.setOffline(1);
|
||||||
|
}
|
||||||
|
if (RobotTaskModelEnum.REJECTION.getType().equals(informationDO.getRobotTaskModel())) {
|
||||||
|
//锁定
|
||||||
|
vo.setDoLock(1);
|
||||||
|
}
|
||||||
|
//设置异常
|
||||||
|
String errorLevelKey = RobotTaskChcheConstant.ROBOT_ERROR_LEVEL + informationDO.getMacAddress();
|
||||||
|
Object errorLevel = redisUtil.get(errorLevelKey);
|
||||||
|
if (ObjectUtil.isNotEmpty(errorLevel) && Integer.parseInt(errorLevel.toString()) >= 3) {
|
||||||
|
vo.setFault(1);
|
||||||
|
}
|
||||||
|
if (RobotStatusEnum.STAND_BY.getType().equals(informationDO.getRobotStatus())) {
|
||||||
|
//待命中
|
||||||
|
vo.setStandby(1);
|
||||||
|
} else if (RobotStatusEnum.CHARGE.getType().equals(informationDO.getRobotStatus())) {
|
||||||
|
//充电中
|
||||||
|
vo.setCharge(1);
|
||||||
|
} else {
|
||||||
|
//任务中
|
||||||
|
vo.setInTask(1);
|
||||||
|
}
|
||||||
|
list.add(vo);
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
|
@ -267,6 +267,18 @@
|
|||||||
</set>
|
</set>
|
||||||
where id = #{id}
|
where id = #{id}
|
||||||
</update>
|
</update>
|
||||||
|
<update id="emptyAreaId">
|
||||||
|
update ware_position_map_item
|
||||||
|
set area_id = null
|
||||||
|
where position_map_id = #{mapId}
|
||||||
|
and area_id = #{areaId}
|
||||||
|
</update>
|
||||||
|
<update id="emptyLaneId">
|
||||||
|
update ware_position_map_item
|
||||||
|
set lane_id = null
|
||||||
|
where position_map_id = #{mapId}
|
||||||
|
and lane_id = #{laneId}
|
||||||
|
</update>
|
||||||
|
|
||||||
<!--通过主键删除-->
|
<!--通过主键删除-->
|
||||||
<delete id="deleteById">
|
<delete id="deleteById">
|
||||||
|
Loading…
Reference in New Issue
Block a user