diff --git a/archives/src/main/java/com/storeroom/modules/dictionary/controller/ArchivesTypeController.java b/archives/src/main/java/com/storeroom/modules/dictionary/controller/ArchivesTypeController.java index 3e4a4d0..acb34df 100644 --- a/archives/src/main/java/com/storeroom/modules/dictionary/controller/ArchivesTypeController.java +++ b/archives/src/main/java/com/storeroom/modules/dictionary/controller/ArchivesTypeController.java @@ -52,7 +52,7 @@ public class ArchivesTypeController { @ApiOperation("创建门类") @AnonymousPostMapping("create") //TODO:权限未添加 - public ApiResponse save(@RequestBody ArchivesTypeDTO archivesTypeDTO) { + public ApiResponse create(@RequestBody ArchivesTypeDTO archivesTypeDTO) { if (!StringUtils.isEmpty(archivesTypeDTO.getId())) { throw new BaseException("id不为空"); } diff --git a/storeroom/src/main/java/com/storeroom/modules/device/controller/StoreroomController.java b/storeroom/src/main/java/com/storeroom/modules/device/controller/StoreroomController.java new file mode 100644 index 0000000..c08aecf --- /dev/null +++ b/storeroom/src/main/java/com/storeroom/modules/device/controller/StoreroomController.java @@ -0,0 +1,72 @@ +package com.storeroom.modules.device.controller; + + +import com.storeroom.annotaion.rest.AnonymousDeleteMapping; +import com.storeroom.annotaion.rest.AnonymousGetMapping; +import com.storeroom.annotaion.rest.AnonymousPostMapping; +import com.storeroom.annotaion.rest.AnonymousPutMapping; +import com.storeroom.exception.BaseException; +import com.storeroom.modules.device.service.StoreroomService; +import com.storeroom.modules.device.service.dto.StoreroomDto; +import com.storeroom.utils.ApiResponse; +import com.storeroom.utils.StringUtils; +import com.storeroom.utils.enums.ResponseStatus; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@Api(tags = "库房区域管理") +@RequestMapping("/api/storeroom/") +public class StoreroomController { + + private final StoreroomService storeroomService; + + + @ApiOperation("新增库房") + @AnonymousPostMapping("create") + public ApiResponse create(@RequestBody StoreroomDto storeroomDto) { + if (!StringUtils.isEmpty(storeroomDto.getId())) { + throw new BaseException("id不为空"); + } + if (StringUtils.isEmpty(storeroomDto.getName())) { + throw new BaseException("名称不能为空"); + } + storeroomService.create(storeroomDto); + return ApiResponse.success(ResponseStatus.SUCCESS); + } + + @ApiOperation("删除库房") + @AnonymousDeleteMapping("delete") + public ApiResponse delete(@RequestParam String id) { + if (StringUtils.isEmpty(id)) { + throw new BaseException("id不能为空"); + } + storeroomService.delete(id); + return ApiResponse.success(ResponseStatus.SUCCESS); + } + + @ApiOperation("修改库房") + @AnonymousPutMapping("update") + public ApiResponse update(@RequestBody StoreroomDto storeroomDto) { + if (StringUtils.isEmpty(storeroomDto.getId())) { + throw new BaseException("id不为空"); + } + if (StringUtils.isEmpty(storeroomDto.getName())) { + throw new BaseException("名称不能为空"); + } + storeroomService.update(storeroomDto); + return ApiResponse.success(ResponseStatus.SUCCESS); + } + + @ApiOperation("获取库房菜单") + @AnonymousGetMapping("tree") + public ApiResponse getTree(){ + return ApiResponse.success(storeroomService.buildTree()); + } +} 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 91d679b..28958e4 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 @@ -5,13 +5,13 @@ import com.storeroom.base.BaseEntity; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; +import org.hibernate.annotations.NotFound; +import org.hibernate.annotations.NotFoundAction; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; +import javax.persistence.*; import javax.validation.constraints.NotNull; import java.io.Serializable; +import java.util.Dictionary; import java.util.Objects; @Entity @@ -20,90 +20,100 @@ import java.util.Objects; @Table(name = "device_info") public class DeviceInfo extends BaseEntity implements Serializable { - @Id - @Column(name = "id") - @NotNull(groups = Update.class) - @ApiModelProperty(value = "ID", hidden = true) - private String id; - - @Column(name = "tid") - @ApiModelProperty(value = "标签id") - private String tid; - - @Column(name = "device_type_id") - @ApiModelProperty(value = "设备类型id") - private String deviceTypeId; - - @Column(name = "supplier_id") - @ApiModelProperty(value = "设备供应商id") - private String supplierId; - - @Column(name = "device_name") - @ApiModelProperty(value = "设备名称") - private String deviceName; - - @Column(name = "device_ip") - @ApiModelProperty(value = "设备接口ip") - private String deviceIp; - - @Column(name = "device_port") - @ApiModelProperty(value = "设备端口") - private Integer devicePort; - - @Column(name = "device_account") - @ApiModelProperty(value = "设备账号") - private String deviceAccount; - - @Column(name = "device_password") - @ApiModelProperty(value = "设备密码") - private String devicePassword; - - @Column(name = "device_state") - @ApiModelProperty(value = "设备状态") - private Integer deviceState; - - @Column(name = "device_id") - @ApiModelProperty(value = "设备id") - private String deviceId; - - @Column(name = "cupboard_No") - @ApiModelProperty(value = "设备柜号") - private Integer cupboardNo; - - @Column(name = "row_No") - @ApiModelProperty(value = "设备柜号") - private Integer rowNo; - - @Column(name = "column_row_No") - @ApiModelProperty(value = "设备每列层号") - private Integer columnRowNo; - - @Column(name = "part_No") - @ApiModelProperty(value = "节数") - private Integer partNo; - - @Column(name = "is_linkage") - @ApiModelProperty(value = "联动操作") - private Integer isLinkage; - - @Column(name = "is_callback") - @ApiModelProperty(value = "回调确认") - private Integer isCallback; - - @Column(name = "is_notice") - @ApiModelProperty(value = "下发通知") - private Integer isNotice; - - @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(tid, that.tid) && Objects.equals(deviceTypeId, that.deviceTypeId) && Objects.equals(supplierId, that.supplierId) && Objects.equals(deviceName, that.deviceName) && Objects.equals(deviceIp, that.deviceIp) && Objects.equals(devicePort, that.devicePort) && Objects.equals(deviceAccount, that.deviceAccount) && Objects.equals(devicePassword, that.devicePassword) && Objects.equals(deviceState, that.deviceState) && Objects.equals(deviceId, that.deviceId) && Objects.equals(cupboardNo, that.cupboardNo) && Objects.equals(rowNo, that.rowNo) && Objects.equals(columnRowNo, that.columnRowNo) && Objects.equals(partNo, that.partNo) && Objects.equals(isLinkage, that.isLinkage) && Objects.equals(isCallback, that.isCallback) && Objects.equals(isNotice, that.isNotice); - } - - @Override - public int hashCode() { - return Objects.hash(id, tid, deviceTypeId, supplierId, deviceName, deviceIp, devicePort, deviceAccount, devicePassword, deviceState, deviceId, cupboardNo, rowNo, columnRowNo, partNo, isLinkage, isCallback, isNotice); - } + @Id + @Column(name = "id") + @NotNull(groups = Update.class) + @ApiModelProperty(value = "ID", hidden = true) + private String id; + + @Column(name = "tid") + @ApiModelProperty(value = "标签id") + private String tid; + + @ManyToOne(targetEntity = Storeroom.class) + @NotFound(action = NotFoundAction.IGNORE) + @JoinColumn(name = "storeroom_id", referencedColumnName = "id") + @ApiModelProperty(value = "库房id") + private Storeroom storeroomId; + + @Column(name = "device_type_id") + @ApiModelProperty(value = "设备类型id") + private String deviceTypeId; + + @Column(name = "supplier_id") + @ApiModelProperty(value = "设备供应商id") + private String supplierId; + + @Column(name = "device_name") + @ApiModelProperty(value = "设备名称") + private String deviceName; + + @Column(name = "device_ip") + @ApiModelProperty(value = "设备接口ip") + private String deviceIp; + + @Column(name = "device_port") + @ApiModelProperty(value = "设备端口") + private Integer devicePort; + + @Column(name = "device_account") + @ApiModelProperty(value = "设备账号") + private String deviceAccount; + + @Column(name = "device_password") + @ApiModelProperty(value = "设备密码") + private String devicePassword; + + @Column(name = "device_state") + @ApiModelProperty(value = "设备状态") + private Integer deviceState; + + @Column(name = "device_id") + @ApiModelProperty(value = "设备id") + private String deviceId; + + @Column(name = "cupboard_No") + @ApiModelProperty(value = "设备柜号") + private Integer cupboardNo; + + @Column(name = "row_No") + @ApiModelProperty(value = "设备柜号") + private Integer rowNo; + + @Column(name = "column_row_No") + @ApiModelProperty(value = "设备每列层号") + private Integer columnRowNo; + + @Column(name = "part_No") + @ApiModelProperty(value = "节数") + private Integer partNo; + + @Column(name = "is_linkage") + @ApiModelProperty(value = "联动操作") + private Integer isLinkage; + + @Column(name = "is_callback") + @ApiModelProperty(value = "回调确认") + private Integer isCallback; + + @Column(name = "is_notice") + @ApiModelProperty(value = "下发通知") + private Integer isNotice; + + @Column(name = "sequence") + @ApiModelProperty(value = "序号") + private Integer sequence; + + @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(tid, that.tid) && Objects.equals(storeroomId, that.storeroomId) && Objects.equals(deviceTypeId, that.deviceTypeId) && Objects.equals(supplierId, that.supplierId) && Objects.equals(deviceName, that.deviceName) && Objects.equals(deviceIp, that.deviceIp) && Objects.equals(devicePort, that.devicePort) && Objects.equals(deviceAccount, that.deviceAccount) && Objects.equals(devicePassword, that.devicePassword) && Objects.equals(deviceState, that.deviceState) && Objects.equals(deviceId, that.deviceId) && Objects.equals(cupboardNo, that.cupboardNo) && Objects.equals(rowNo, that.rowNo) && Objects.equals(columnRowNo, that.columnRowNo) && Objects.equals(partNo, that.partNo) && Objects.equals(isLinkage, that.isLinkage) && Objects.equals(isCallback, that.isCallback) && Objects.equals(isNotice, that.isNotice) && Objects.equals(sequence, that.sequence); + } + + @Override + public int hashCode() { + return Objects.hash(id, tid, storeroomId, deviceTypeId, supplierId, deviceName, deviceIp, devicePort, deviceAccount, devicePassword, deviceState, deviceId, cupboardNo, rowNo, columnRowNo, partNo, isLinkage, isCallback, isNotice, sequence); + } } diff --git a/storeroom/src/main/java/com/storeroom/modules/device/domain/Storeroom.java b/storeroom/src/main/java/com/storeroom/modules/device/domain/Storeroom.java index 470f4e4..c360d06 100644 --- a/storeroom/src/main/java/com/storeroom/modules/device/domain/Storeroom.java +++ b/storeroom/src/main/java/com/storeroom/modules/device/domain/Storeroom.java @@ -1,17 +1,17 @@ package com.storeroom.modules.device.domain; +import com.alibaba.fastjson.annotation.JSONField; import com.storeroom.base.BaseEntity; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; +import lombok.experimental.Accessors; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; +import javax.persistence.*; import javax.validation.constraints.NotNull; import java.io.Serializable; +import java.util.List; import java.util.Objects; @@ -19,6 +19,7 @@ import java.util.Objects; @Getter @Setter @Table(name = "storeroom") +@Accessors(chain = true) public class Storeroom extends BaseEntity implements Serializable { @Id @@ -27,32 +28,43 @@ public class Storeroom extends BaseEntity implements Serializable { @ApiModelProperty(value = "库房id", hidden = true) private String id; - @Column(name = "pid") - @ApiModelProperty(value = "父级id") - private String pid; @Column(name = "name") @ApiModelProperty(value = "库房名称") + @JSONField(ordinal = 1) private String name; + + @Column(name = "pid") + @ApiModelProperty(value = "父级id") + @JSONField(ordinal = 2) + private String pid; + + @Column(name = "remark") @ApiModelProperty(value = "备注") + @JSONField(ordinal = 3) private String remark; @Column(name = "sort") @ApiModelProperty(value = "排序") + @JSONField(ordinal = 4) private Integer sort; + @Transient + @JSONField(ordinal = 5) + private List children; + @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Storeroom storeroom = (Storeroom) o; - return Objects.equals(id, storeroom.id) && Objects.equals(pid, storeroom.pid) && Objects.equals(name, storeroom.name) && Objects.equals(remark, storeroom.remark) && Objects.equals(sort, storeroom.sort); + return Objects.equals(id, storeroom.id) && Objects.equals(name, storeroom.name) && Objects.equals(pid, storeroom.pid) && Objects.equals(remark, storeroom.remark) && Objects.equals(sort, storeroom.sort) && Objects.equals(children, storeroom.children); } @Override public int hashCode() { - return Objects.hash(id, pid, name, remark, sort); + return Objects.hash(id, name, pid, remark, sort, children); } } 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 9a699f6..4225012 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 @@ -1,8 +1,14 @@ package com.storeroom.modules.device.repository; 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 java.util.List; + public interface DeviceInfoRepository extends JpaRepository, JpaSpecificationExecutor { + + + List findByStoreroomId(Storeroom storeroomId); } diff --git a/storeroom/src/main/java/com/storeroom/modules/device/repository/StoreroomRepository.java b/storeroom/src/main/java/com/storeroom/modules/device/repository/StoreroomRepository.java index 66749af..6faedf3 100644 --- a/storeroom/src/main/java/com/storeroom/modules/device/repository/StoreroomRepository.java +++ b/storeroom/src/main/java/com/storeroom/modules/device/repository/StoreroomRepository.java @@ -5,5 +5,16 @@ import com.storeroom.modules.device.domain.Storeroom; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import java.util.List; + public interface StoreroomRepository extends JpaRepository, JpaSpecificationExecutor { + + + /** + * 根据名称查询 + * @param name + * @return + */ + List findByName(String name); + } diff --git a/storeroom/src/main/java/com/storeroom/modules/device/service/StoreroomService.java b/storeroom/src/main/java/com/storeroom/modules/device/service/StoreroomService.java new file mode 100644 index 0000000..79f2b64 --- /dev/null +++ b/storeroom/src/main/java/com/storeroom/modules/device/service/StoreroomService.java @@ -0,0 +1,32 @@ +package com.storeroom.modules.device.service; + +import com.storeroom.modules.device.domain.Storeroom; +import com.storeroom.modules.device.service.dto.StoreroomDto; + +import java.util.List; + +public interface StoreroomService { + + + /** + * 创建库房 + */ + void create(StoreroomDto storeroomDto); + + + /** + * 删除 库房 + * @param id + */ + void delete(String id); + + + /** + * 修改库房 + * @param storeroomDto + * @return + */ + void update(StoreroomDto storeroomDto); + + List buildTree(); +} diff --git a/storeroom/src/main/java/com/storeroom/modules/device/service/dto/StoreroomDto.java b/storeroom/src/main/java/com/storeroom/modules/device/service/dto/StoreroomDto.java new file mode 100644 index 0000000..d34fbaa --- /dev/null +++ b/storeroom/src/main/java/com/storeroom/modules/device/service/dto/StoreroomDto.java @@ -0,0 +1,44 @@ +package com.storeroom.modules.device.service.dto; + + +import com.storeroom.base.BaseDTO; +import com.storeroom.modules.device.domain.Storeroom; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.List; +import java.util.Objects; + +@Getter +@Setter +public class StoreroomDto extends BaseDTO implements Serializable { + + + private String id; + + private String pid; + + @NotNull(message = "库房名称不能为空") + private String name; + + private String remark; + + private Integer sort; + + private List children; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + StoreroomDto that = (StoreroomDto) o; + return Objects.equals(id, that.id) && Objects.equals(pid, that.pid) && Objects.equals(name, that.name) && Objects.equals(remark, that.remark) && Objects.equals(sort, that.sort) && Objects.equals(children, that.children); + } + + @Override + public int hashCode() { + return Objects.hash(id, pid, name, remark, sort, children); + } +} diff --git a/storeroom/src/main/java/com/storeroom/modules/device/service/impl/StoreroomImpl.java b/storeroom/src/main/java/com/storeroom/modules/device/service/impl/StoreroomImpl.java new file mode 100644 index 0000000..5286a09 --- /dev/null +++ b/storeroom/src/main/java/com/storeroom/modules/device/service/impl/StoreroomImpl.java @@ -0,0 +1,85 @@ +package com.storeroom.modules.device.service.impl; + +import com.storeroom.exception.BaseException; +import com.storeroom.modules.device.domain.Storeroom; +import com.storeroom.modules.device.repository.DeviceInfoRepository; +import com.storeroom.modules.device.repository.StoreroomRepository; +import com.storeroom.modules.device.service.StoreroomService; +import com.storeroom.modules.device.service.dto.StoreroomDto; +import com.storeroom.modules.device.service.mapstruct.StoreroomMapper; +import com.storeroom.utils.NanoIdUtils; +import com.storeroom.utils.ValidationUtil; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; + +import java.util.Comparator; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + + +@Service +@RequiredArgsConstructor +public class StoreroomImpl implements StoreroomService { + + private final StoreroomRepository storeroomRepository; + private final StoreroomMapper storeroomMapper; + private final DeviceInfoRepository deviceInfoRepository; + + @Override + public void create(StoreroomDto storeroomDto) { + Storeroom storeroom = storeroomMapper.toEntity(storeroomDto); + List storeroom1 = storeroomRepository.findByName(storeroom.getName()); + if (Objects.requireNonNull(storeroom1).size() != 0) { + throw new BaseException("名称不能重复"); + } + storeroom.setId(NanoIdUtils.randomNanoId()); + storeroomRepository.save(storeroom); + } + + @Override + public void delete(String id) { + Storeroom storeroom = storeroomRepository.findById(id).orElseGet(Storeroom::new); + Object obj = deviceInfoRepository.findByStoreroomId(storeroom); + if (!ObjectUtils.isEmpty(obj)) { + throw new BaseException("该库房已绑定设备,无法删除"); + } + storeroomRepository.deleteById(id); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(StoreroomDto storeroomDto) { + Storeroom storeroom = storeroomMapper.toEntity(storeroomDto); + Storeroom storeroom1 = storeroomRepository.findById(storeroom.getId()).orElseGet(Storeroom::new); + List storeroom2 = storeroomRepository.findByName(storeroom.getName()); + if (storeroom2.size() != 0) { + throw new BaseException("名称不能重复"); + } + ValidationUtil.isNull(storeroom1.getId(), "Storeroom", "id", storeroom.getId()); + + storeroom1.setPid(storeroom.getPid()); + storeroom1.setRemark(storeroom.getRemark()); + storeroom1.setName(storeroom.getName()); + storeroom1.setSort(storeroom.getSort()); + storeroomRepository.save(storeroom1); + } + + @Override + public List buildTree() { + List list = storeroomRepository.findAll(); + + return list.stream().filter(item -> item.getPid().equals("0")) + .map(item -> item.setChildren(getChildren(item.getId(), list))) + .collect(Collectors.toList()); + } + + private List getChildren(String id, List list) { + return list.stream().filter(item -> item.getPid().equals(id)) + .map(item -> item.setChildren(getChildren(item.getId(), list))) + .collect(Collectors.toList()); + + } +} diff --git a/storeroom/src/main/java/com/storeroom/modules/device/service/mapstruct/StoreroomMapper.java b/storeroom/src/main/java/com/storeroom/modules/device/service/mapstruct/StoreroomMapper.java new file mode 100644 index 0000000..5ae122c --- /dev/null +++ b/storeroom/src/main/java/com/storeroom/modules/device/service/mapstruct/StoreroomMapper.java @@ -0,0 +1,12 @@ +package com.storeroom.modules.device.service.mapstruct; + + +import com.storeroom.base.BaseMapper; +import com.storeroom.modules.device.domain.Storeroom; +import com.storeroom.modules.device.service.dto.StoreroomDto; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; + +@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface StoreroomMapper extends BaseMapper { +} diff --git a/system/pom.xml b/system/pom.xml index 08ff23c..17de476 100644 --- a/system/pom.xml +++ b/system/pom.xml @@ -85,6 +85,12 @@ archives 1.0 + + + com.storeroom + storeroom + 1.0 +