diff --git a/storeroom/src/main/java/com/storeroom/modules/device/controller/DeseCabinetController.java b/storeroom/src/main/java/com/storeroom/modules/device/controller/DeseCabinetController.java index dd1e7c8..5f39d38 100644 --- a/storeroom/src/main/java/com/storeroom/modules/device/controller/DeseCabinetController.java +++ b/storeroom/src/main/java/com/storeroom/modules/device/controller/DeseCabinetController.java @@ -8,6 +8,7 @@ import com.storeroom.modules.device.domain.DeseCabinet; import com.storeroom.modules.device.service.DeseCabinetService; import com.storeroom.modules.device.service.DeviceService; import com.storeroom.modules.device.service.dto.DeseCabinetDto; +import com.storeroom.modules.device.service.dto.DeviceInfoDto; import com.storeroom.utils.ApiResponse; import com.storeroom.utils.StringUtils; import com.storeroom.utils.enums.ResponseStatus; @@ -25,28 +26,28 @@ import org.springframework.web.bind.annotation.RestController; public class DeseCabinetController { - private final DeseCabinetService deseCabinetService; + private final DeviceService deviceService; @ApiOperation("新增密集架") @AnonymousPostMapping("create") - public ApiResponse create(@RequestBody DeseCabinet deseCabinet) { + public ApiResponse create(@RequestBody DeviceInfoDto deviceInfoDto) { - if (!StringUtils.isEmpty(deseCabinet.getId())) { + if (!StringUtils.isEmpty(deviceInfoDto.getId())) { throw new BaseException("id不为空"); } - verifyValues(deseCabinet); - deseCabinetService.create(deseCabinet); + verifyValues(deviceInfoDto); + deviceService.createDeseCabinet(deviceInfoDto); return ApiResponse.success(ResponseStatus.SUCCESS); } @ApiOperation("修改密集架") @AnonymousPutMapping("update") - public ApiResponse update(@RequestBody DeseCabinet deseCabinet) { - if (StringUtils.isEmpty(deseCabinet.getId())) { + public ApiResponse update(@RequestBody DeviceInfoDto deviceInfoDto) { + if (StringUtils.isEmpty(deviceInfoDto.getId())) { throw new BaseException("id不能为空"); } - verifyValues(deseCabinet); - deseCabinetService.update(deseCabinet); + verifyValues(deviceInfoDto); + deviceService.updateDeseCabinet(deviceInfoDto); return ApiResponse.success(ResponseStatus.SUCCESS); } @@ -55,18 +56,18 @@ public class DeseCabinetController { /** * 必填字段验证 * - * @param deseCabinet / + * @param deviceInfoDto / */ - private void verifyValues(@RequestBody DeseCabinet deseCabinet) { - if (deseCabinet.getAreaNo() != null - && deseCabinet.getRowNo() != null - && deseCabinet.getSumColumnNo() != null - && deseCabinet.getFirstColumnNo() != null - && deseCabinet.getPartNo() != null - && StringUtils.isEmpty(deseCabinet.getDeviceInfo().getDeviceName()) - && StringUtils.isEmpty(deseCabinet.getDeviceInfo().getStoreroomId().getId()) - && StringUtils.isEmpty(deseCabinet.getDeviceInfo().getDeviceIp()) - && deseCabinet.getDeviceInfo().getDevicePort() != null + private void verifyValues(@RequestBody DeviceInfoDto deviceInfoDto) { + if (deviceInfoDto.getAreaNo() != null + && deviceInfoDto.getRowNo() != null + && deviceInfoDto.getSumColumnNo() != null + && deviceInfoDto.getFirstColumnNo() != null + && deviceInfoDto.getPartNo() != null + && StringUtils.isEmpty(deviceInfoDto.getDeviceName()) + && StringUtils.isEmpty(deviceInfoDto.getStoreroomId().getId()) + && StringUtils.isEmpty(deviceInfoDto.getDeviceIp()) + && deviceInfoDto.getDevicePort() != null ) { throw new BaseException("必填字段不能为空"); } diff --git a/storeroom/src/main/java/com/storeroom/modules/device/domain/DeviceInfo.java b/storeroom/src/main/java/com/storeroom/modules/device/domain/DeviceInfo.java index 7675d17..ab61f21 100644 --- a/storeroom/src/main/java/com/storeroom/modules/device/domain/DeviceInfo.java +++ b/storeroom/src/main/java/com/storeroom/modules/device/domain/DeviceInfo.java @@ -58,21 +58,72 @@ public class DeviceInfo extends BaseEntity implements Serializable { @ApiModelProperty(value = "设备状态") private Integer deviceState; + @Column(name = "row_No") + @ApiModelProperty(value = "层数") + private Integer rowNo; + + @Column(name = "area_No") + @ApiModelProperty(value = "区号") + private Integer areaNo; + + @Column(name = "sum_column_No") + @ApiModelProperty(value = "总列数") + private Integer sumColumnNo; + + @Column(name = "first_column_No") + @ApiModelProperty(value = "起始列号") + private Integer firstColumnNo; + + @Column(name = "part_No") + @ApiModelProperty(value = "节数") + private Integer partNo; + + @Column(name = "storeroom_code") + @ApiModelProperty(value = "库房代码") + private String storeroomCode; + + @Column(name = "column_row_No") + @ApiModelProperty(value = "每层列数") + private Integer columnRowNo; + + @Column(name = "device_account") + @ApiModelProperty(value = "设备账号") + private String deviceAccount; + + @Column(name = "device_password") + @ApiModelProperty(value = "设备密码") + private String devicePassword; + + @Column(name = "cupboard_No") + @ApiModelProperty(value = "柜号") + private Integer cupboardNo; + + @Column(name = "is_notice") + @ApiModelProperty(value = "下发通知") + private Boolean isNotice; + @Column(name = "sequence") @ApiModelProperty(value = "序号") private Integer sequence; + @Transient + @ApiModelProperty(value = "联动操作") + private OperatingState isLinkage; + + @Transient + @ApiModelProperty(value = "是否回调") + private OperatingState isCallback; @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; DeviceInfo that = (DeviceInfo) o; - return Objects.equals(id, that.id) && Objects.equals(supplierId, that.supplierId) && Objects.equals(storeroomId, that.storeroomId) && Objects.equals(deviceName, that.deviceName) && Objects.equals(deviceIp, that.deviceIp) && Objects.equals(devicePort, that.devicePort) && Objects.equals(deviceState, that.deviceState) && Objects.equals(sequence, that.sequence); + return Objects.equals(id, that.id) && Objects.equals(supplierId, that.supplierId) && Objects.equals(storeroomId, that.storeroomId) && Objects.equals(deviceTypeId, that.deviceTypeId) && Objects.equals(deviceName, that.deviceName) && Objects.equals(deviceIp, that.deviceIp) && Objects.equals(devicePort, that.devicePort) && Objects.equals(deviceState, that.deviceState) && Objects.equals(rowNo, that.rowNo) && Objects.equals(areaNo, that.areaNo) && Objects.equals(sumColumnNo, that.sumColumnNo) && Objects.equals(firstColumnNo, that.firstColumnNo) && Objects.equals(partNo, that.partNo) && Objects.equals(storeroomCode, that.storeroomCode) && Objects.equals(columnRowNo, that.columnRowNo) && Objects.equals(deviceAccount, that.deviceAccount) && Objects.equals(devicePassword, that.devicePassword) && Objects.equals(cupboardNo, that.cupboardNo) && Objects.equals(isNotice, that.isNotice) && Objects.equals(sequence, that.sequence) && Objects.equals(isLinkage, that.isLinkage) && Objects.equals(isCallback, that.isCallback); } @Override public int hashCode() { - return Objects.hash(id, supplierId, storeroomId, deviceName, deviceIp, devicePort, deviceState, sequence); + return Objects.hash(id, supplierId, storeroomId, deviceTypeId, deviceName, deviceIp, devicePort, deviceState, rowNo, areaNo, sumColumnNo, firstColumnNo, partNo, storeroomCode, columnRowNo, deviceAccount, devicePassword, cupboardNo, isNotice, sequence, isLinkage, isCallback); } } diff --git a/storeroom/src/main/java/com/storeroom/modules/device/domain/RotaryCabinet.java b/storeroom/src/main/java/com/storeroom/modules/device/domain/RotaryCabinet.java index 7aa0726..fb91891 100644 --- a/storeroom/src/main/java/com/storeroom/modules/device/domain/RotaryCabinet.java +++ b/storeroom/src/main/java/com/storeroom/modules/device/domain/RotaryCabinet.java @@ -33,7 +33,7 @@ public class RotaryCabinet extends BaseEntity implements Serializable { private String storeroomCode; @Column(name = "column_row_No") - @ApiModelProperty(value = "层数") + @ApiModelProperty(value = "每层列数") private Integer columnRowNo; @Column(name = "device_account") diff --git a/storeroom/src/main/java/com/storeroom/modules/device/repository/DeviceInfoRepository.java b/storeroom/src/main/java/com/storeroom/modules/device/repository/DeviceInfoRepository.java index 189d478..1e3b840 100644 --- a/storeroom/src/main/java/com/storeroom/modules/device/repository/DeviceInfoRepository.java +++ b/storeroom/src/main/java/com/storeroom/modules/device/repository/DeviceInfoRepository.java @@ -4,19 +4,33 @@ import com.storeroom.modules.device.domain.DeviceInfo; import com.storeroom.modules.device.domain.Storeroom; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Query; import java.util.List; -public interface DeviceInfoRepository extends JpaRepository, JpaSpecificationExecutor { +public interface DeviceInfoRepository extends JpaRepository, JpaSpecificationExecutor { - List findByStoreroomId(Storeroom storeroomId); + List findByStoreroomId(Storeroom storeroomId); - /** - * 根据ip 端口号 查询 - * @param ip - * @param port - * @return - */ - DeviceInfo findByDeviceIpAndDevicePort(String ip,Integer port); + /** + * 根据ip 端口号 查询 + * + * @param ip + * @param port + * @return + */ + List findByDeviceIpAndDevicePort(String ip, Integer port); + + + /** + * 查询区号 ip 端口号 + * + * @param areaNo 区号 + * @param ip 设备ip + * @param port 设备端口号 + * @return + */ + @Query(value = "SELECT * FROM device_info WHERE area_No = ?1 AND device_ip=?2 AND device_port=?3", nativeQuery = true) + List findByAreaNoAndAndDeviceIpAndAndDevicePort(Integer areaNo, String ip, Integer port); } diff --git a/storeroom/src/main/java/com/storeroom/modules/device/service/DeviceService.java b/storeroom/src/main/java/com/storeroom/modules/device/service/DeviceService.java index f872780..ed70eb6 100644 --- a/storeroom/src/main/java/com/storeroom/modules/device/service/DeviceService.java +++ b/storeroom/src/main/java/com/storeroom/modules/device/service/DeviceService.java @@ -1,6 +1,6 @@ package com.storeroom.modules.device.service; -import com.storeroom.modules.device.service.dto.DeseCabinetDto; + import com.storeroom.modules.device.service.dto.DeviceInfoDto; import java.util.List; @@ -13,5 +13,16 @@ public interface DeviceService { */ List findByDevice(String StoreRoomId); + /** + * 创建设备 + * @param deviceInfoDto / + */ + void createDeseCabinet(DeviceInfoDto deviceInfoDto); + + /** + * 修改设备 + * @param deviceInfoDto / + */ + void updateDeseCabinet(DeviceInfoDto deviceInfoDto); } diff --git a/storeroom/src/main/java/com/storeroom/modules/device/service/dto/DeviceInfoDto.java b/storeroom/src/main/java/com/storeroom/modules/device/service/dto/DeviceInfoDto.java index 6752583..ed169a5 100644 --- a/storeroom/src/main/java/com/storeroom/modules/device/service/dto/DeviceInfoDto.java +++ b/storeroom/src/main/java/com/storeroom/modules/device/service/dto/DeviceInfoDto.java @@ -3,6 +3,7 @@ package com.storeroom.modules.device.service.dto; import com.storeroom.base.BaseDTO; import com.storeroom.modules.device.domain.DeviceType; +import com.storeroom.modules.device.domain.OperatingState; import com.storeroom.modules.device.domain.Storeroom; import com.storeroom.modules.device.domain.Supplier; import lombok.Getter; @@ -32,18 +33,44 @@ public class DeviceInfoDto extends BaseDTO implements Serializable { private Integer deviceState; + private Integer rowNo; + + private Integer areaNo; + + private Integer sumColumnNo; + + private Integer firstColumnNo; + + private Integer partNo; + + private String storeroomCode; + + private Integer columnRowNo; + + private String deviceAccount; + + private String devicePassword; + + private Integer cupboardNo; + + private Boolean isNotice; + private Integer sequence; + private OperatingState isLinkage; + + private OperatingState isCallback; + @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; DeviceInfoDto that = (DeviceInfoDto) o; - return Objects.equals(id, that.id) && Objects.equals(supplierId, that.supplierId) && Objects.equals(storeroomId, that.storeroomId) && Objects.equals(deviceName, that.deviceName) && Objects.equals(deviceIp, that.deviceIp) && Objects.equals(devicePort, that.devicePort) && Objects.equals(deviceState, that.deviceState) && Objects.equals(sequence, that.sequence); + return Objects.equals(id, that.id) && Objects.equals(supplierId, that.supplierId) && Objects.equals(storeroomId, that.storeroomId) && Objects.equals(deviceTypeId, that.deviceTypeId) && Objects.equals(deviceName, that.deviceName) && Objects.equals(deviceIp, that.deviceIp) && Objects.equals(devicePort, that.devicePort) && Objects.equals(deviceState, that.deviceState) && Objects.equals(rowNo, that.rowNo) && Objects.equals(areaNo, that.areaNo) && Objects.equals(sumColumnNo, that.sumColumnNo) && Objects.equals(firstColumnNo, that.firstColumnNo) && Objects.equals(partNo, that.partNo) && Objects.equals(storeroomCode, that.storeroomCode) && Objects.equals(columnRowNo, that.columnRowNo) && Objects.equals(deviceAccount, that.deviceAccount) && Objects.equals(devicePassword, that.devicePassword) && Objects.equals(cupboardNo, that.cupboardNo) && Objects.equals(isNotice, that.isNotice) && Objects.equals(sequence, that.sequence) && Objects.equals(isLinkage, that.isLinkage) && Objects.equals(isCallback, that.isCallback); } @Override public int hashCode() { - return Objects.hash(id, supplierId, storeroomId, deviceName, deviceIp, devicePort, deviceState, sequence); + return Objects.hash(id, supplierId, storeroomId, deviceTypeId, deviceName, deviceIp, devicePort, deviceState, rowNo, areaNo, sumColumnNo, firstColumnNo, partNo, storeroomCode, columnRowNo, deviceAccount, devicePassword, cupboardNo, isNotice, sequence, isLinkage, isCallback); } } diff --git a/storeroom/src/main/java/com/storeroom/modules/device/service/impl/DeviceImpl.java b/storeroom/src/main/java/com/storeroom/modules/device/service/impl/DeviceImpl.java index a51bb3b..ec3fd81 100644 --- a/storeroom/src/main/java/com/storeroom/modules/device/service/impl/DeviceImpl.java +++ b/storeroom/src/main/java/com/storeroom/modules/device/service/impl/DeviceImpl.java @@ -1,11 +1,21 @@ package com.storeroom.modules.device.service.impl; +import com.storeroom.exception.BaseException; +import com.storeroom.modules.device.domain.*; +import com.storeroom.modules.device.repository.DeviceArchivesTagRepository; +import com.storeroom.modules.device.repository.DeviceInfoRepository; +import com.storeroom.modules.device.repository.OperatingStateRepository; import com.storeroom.modules.device.service.DeviceService; import com.storeroom.modules.device.service.dto.DeviceInfoDto; +import com.storeroom.modules.device.service.mapstruct.DeviceInfoMapper; +import com.storeroom.utils.NanoIdUtils; +import com.storeroom.utils.StringUtils; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; import java.util.List; +import java.util.concurrent.ThreadLocalRandom; @Service @@ -13,8 +23,140 @@ import java.util.List; public class DeviceImpl implements DeviceService { + private final DeviceInfoRepository deviceInfoRepository; + private final DeviceInfoMapper deviceInfoMapper; + private final OperatingStateRepository operatingStateRepository; + private final DeviceArchivesTagRepository deviceArchivesTagRepository; + @Override public List findByDevice(String StoreRoomId) { return null; } + + @Override + public void createDeseCabinet(DeviceInfoDto deviceInfoDto) { + DeviceInfo deviceInfo = deviceInfoMapper.toEntity(deviceInfoDto); + List deviceInfoList = deviceInfoRepository.findByAreaNoAndAndDeviceIpAndAndDevicePort(deviceInfo.getAreaNo(), deviceInfo.getDeviceIp(), deviceInfo.getDevicePort()); + if (deviceInfoList.size() != 0) { + throw new BaseException("区号IP端口不能重复添加设备"); + } + //创建密集架id + deviceInfo.setId(NanoIdUtils.randomNanoId()); + //生成架位 + String position = deviceInfo.getAreaNo() + + "-" + + deviceInfo.getFirstColumnNo() + + "-" + + deviceInfo.getPartNo() + + "-" + + deviceInfo.getRowNo() + + "-" + + GenerateNum(); + String leftOrRight; + if (GenerateNum().equals("1")) { + leftOrRight = "左"; + } else { + leftOrRight = "右"; + } + String positionName = deviceInfo.getAreaNo() + + "区" + + deviceInfo.getFirstColumnNo() + + "列" + + deviceInfo.getPartNo() + + "节" + + deviceInfo.getRowNo() + + "层" + + leftOrRight; + DeviceArchivesTag deviceArchivesTag = new DeviceArchivesTag(); + //生成架位标签表id + deviceArchivesTag.setId(NanoIdUtils.randomNanoId()); + deviceArchivesTag.setPosition(position); + deviceArchivesTag.setDeviceInfoId(deviceInfo.getId()); + deviceArchivesTag.setPosition_name(positionName); + //创建联动操作状态对象 + IsLinkageState(deviceInfo); + IsCallbackState(deviceInfo); + deviceArchivesTagRepository.save(deviceArchivesTag); + deviceInfoRepository.save(deviceInfo); + + } + + @Override + public void updateDeseCabinet(DeviceInfoDto deviceInfoDto) { + DeviceInfo deviceInfo = deviceInfoMapper.toEntity(deviceInfoDto); + List deviceInfoList = deviceInfoRepository.findByAreaNoAndAndDeviceIpAndAndDevicePort(deviceInfo.getAreaNo(), deviceInfo.getDeviceIp(), deviceInfo.getDevicePort()); + if (!ObjectUtils.isEmpty(deviceInfoList)){ + throw new BaseException("区号IP端口不能重复添加设备"); + } + + } + + /** + * 生成架位左右位置 + * + * @return + */ + private String GenerateNum() { + ThreadLocalRandom tlr = ThreadLocalRandom.current(); + return String.valueOf(tlr.nextInt(1, 2)); + } + + /** + * 保存联动操作状态 + * + * @param deviceInfo / + */ + private void IsLinkageState(DeviceInfo deviceInfo) { + + if (StringUtils.isEmpty(deviceInfo.getIsLinkage().getId())){ + OperatingState operatingState = new OperatingState(); + operatingState.setId(NanoIdUtils.randomNanoId()); + operatingState.setDeviceId(deviceInfo.getId()); + operatingState.setBorrow(deviceInfo.getIsLinkage().getBorrow()); + operatingState.setInBound(deviceInfo.getIsLinkage().getInBound()); + operatingState.setOutBound(deviceInfo.getIsLinkage().getOutBound()); + operatingState.setLend(deviceInfo.getIsLinkage().getLend()); + operatingState.setStateType(deviceInfo.getIsLinkage().getStateType()); + operatingStateRepository.save(operatingState); + }else { + OperatingState operatingState1 = operatingStateRepository.findById(deviceInfo.getIsLinkage().getId()).orElseGet(OperatingState::new); + operatingState1.setDeviceId(deviceInfo.getId()); + operatingState1.setBorrow(deviceInfo.getIsLinkage().getBorrow()); + operatingState1.setInBound(deviceInfo.getIsLinkage().getInBound()); + operatingState1.setOutBound(deviceInfo.getIsLinkage().getOutBound()); + operatingState1.setLend(deviceInfo.getIsLinkage().getLend()); + operatingState1.setStateType(deviceInfo.getIsLinkage().getStateType()); + operatingStateRepository.save(operatingState1); + } + + } + + /** + * 保存回调操作状态 + * + * @param deviceInfo / + */ + private void IsCallbackState(DeviceInfo deviceInfo) { + + if (StringUtils.isEmpty(deviceInfo.getIsCallback().getId())) { + OperatingState operatingState = new OperatingState(); + operatingState.setId(NanoIdUtils.randomNanoId()); + operatingState.setDeviceId(deviceInfo.getId()); + operatingState.setBorrow(deviceInfo.getIsCallback().getBorrow()); + operatingState.setInBound(deviceInfo.getIsCallback().getInBound()); + operatingState.setOutBound(deviceInfo.getIsCallback().getOutBound()); + operatingState.setLend(deviceInfo.getIsCallback().getLend()); + operatingState.setStateType(deviceInfo.getIsCallback().getStateType()); + operatingStateRepository.save(operatingState); + } else { + OperatingState operatingState1 = operatingStateRepository.findById(deviceInfo.getIsLinkage().getId()).orElseGet(OperatingState::new); + operatingState1.setDeviceId(deviceInfo.getId()); + operatingState1.setBorrow(deviceInfo.getIsCallback().getBorrow()); + operatingState1.setInBound(deviceInfo.getIsCallback().getInBound()); + operatingState1.setOutBound(deviceInfo.getIsCallback().getOutBound()); + operatingState1.setLend(deviceInfo.getIsCallback().getLend()); + operatingState1.setStateType(deviceInfo.getIsCallback().getStateType()); + operatingStateRepository.save(operatingState1); + } + } }