From 5839f04950d2f3f59db507f5f6e0689af0f200bd Mon Sep 17 00:00:00 2001 From: SjS Date: Wed, 23 Apr 2025 10:51:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BA=97=E9=93=BA=E7=9B=B8=E5=85=B3=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/bst/booth/mapper/BoothMapper.java | 4 +- .../ruoyi/bst/booth/service/BoothService.java | 18 +- .../bst/booth/service/BoothValidator.java | 20 ++ .../booth/service/impl/BoothServiceImpl.java | 33 +++- .../service/impl/BoothValidatorImpl.java | 54 ++++++ .../com/ruoyi/bst/floor/domain/Floor.java | 40 ++++ .../ruoyi/bst/floor/domain/FloorQuery.java | 14 ++ .../com/ruoyi/bst/floor/domain/FloorVO.java | 17 ++ .../ruoyi/bst/floor/mapper/FloorMapper.java | 77 ++++++++ .../ruoyi/bst/floor/mapper/FloorMapper.xml | 180 ++++++++++++++++++ .../ruoyi/bst/floor/service/FloorService.java | 70 +++++++ .../bst/floor/service/FloorValidator.java | 29 +++ .../floor/service/impl/FloorServiceImpl.java | 112 +++++++++++ .../service/impl/FloorValidatorImpl.java | 62 ++++++ .../com/ruoyi/bst/part/domain/PartVO.java | 5 + .../com/ruoyi/bst/part/mapper/PartMapper.xml | 4 +- .../com/ruoyi/bst/store/domain/Store.java | 12 ++ .../ruoyi/bst/store/mapper/StoreMapper.xml | 18 ++ .../system/user/service/UserValidator.java | 1 + .../com/ruoyi/web/bst/BoothController.java | 27 ++- .../com/ruoyi/web/bst/FloorController.java | 119 ++++++++++++ 21 files changed, 903 insertions(+), 13 deletions(-) create mode 100644 ruoyi-service/src/main/java/com/ruoyi/bst/booth/service/BoothValidator.java create mode 100644 ruoyi-service/src/main/java/com/ruoyi/bst/booth/service/impl/BoothValidatorImpl.java create mode 100644 ruoyi-service/src/main/java/com/ruoyi/bst/floor/domain/Floor.java create mode 100644 ruoyi-service/src/main/java/com/ruoyi/bst/floor/domain/FloorQuery.java create mode 100644 ruoyi-service/src/main/java/com/ruoyi/bst/floor/domain/FloorVO.java create mode 100644 ruoyi-service/src/main/java/com/ruoyi/bst/floor/mapper/FloorMapper.java create mode 100644 ruoyi-service/src/main/java/com/ruoyi/bst/floor/mapper/FloorMapper.xml create mode 100644 ruoyi-service/src/main/java/com/ruoyi/bst/floor/service/FloorService.java create mode 100644 ruoyi-service/src/main/java/com/ruoyi/bst/floor/service/FloorValidator.java create mode 100644 ruoyi-service/src/main/java/com/ruoyi/bst/floor/service/impl/FloorServiceImpl.java create mode 100644 ruoyi-service/src/main/java/com/ruoyi/bst/floor/service/impl/FloorValidatorImpl.java create mode 100644 ruoyi-web/src/main/java/com/ruoyi/web/bst/FloorController.java diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/booth/mapper/BoothMapper.java b/ruoyi-service/src/main/java/com/ruoyi/bst/booth/mapper/BoothMapper.java index c384c2c..909af1a 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/booth/mapper/BoothMapper.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/booth/mapper/BoothMapper.java @@ -70,5 +70,7 @@ public interface BoothMapper * @param boothIds 需要删除的数据主键集合 * @return 结果 */ - public int deleteBoothByBoothIds(Long[] boothIds); + public int deleteBoothByBoothIds(@Param("ids") List boothIds); + + List selectIdByQuery(@Param("query") BoothQuery query); } diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/booth/service/BoothService.java b/ruoyi-service/src/main/java/com/ruoyi/bst/booth/service/BoothService.java index b3cccd9..7c0a58a 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/booth/service/BoothService.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/booth/service/BoothService.java @@ -16,10 +16,14 @@ public interface BoothService /** * 查询卡座 * - * @param boothId 卡座主键 + * @param id 卡座主键 * @return 卡座 */ - public BoothVO selectBoothByBoothId(Long boothId); + public BoothVO selectBoothByBoothId(Long id, boolean scope); + + default BoothVO selectBoothByBoothId(Long id) { + return this.selectBoothByBoothId(id, false); + } /** * 查询卡座列表 @@ -29,6 +33,12 @@ public interface BoothService */ public List selectBoothList(BoothQuery booth); + + /** + * 查询一个 + */ + public BoothVO selectOne(BoothQuery query); + /** * 新增卡座 * @@ -51,7 +61,7 @@ public interface BoothService * @param boothIds 需要删除的卡座主键集合 * @return 结果 */ - public int deleteBoothByBoothIds(Long[] boothIds); + public int deleteBoothByBoothIds(List boothIds); /** * 删除卡座信息 @@ -60,4 +70,6 @@ public interface BoothService * @return 结果 */ public int deleteBoothByBoothId(Long boothId); + + Long getUserId(Booth booth); } diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/booth/service/BoothValidator.java b/ruoyi-service/src/main/java/com/ruoyi/bst/booth/service/BoothValidator.java new file mode 100644 index 0000000..30a4937 --- /dev/null +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/booth/service/BoothValidator.java @@ -0,0 +1,20 @@ +package com.ruoyi.bst.booth.service; + +import java.util.List; + +public interface BoothValidator { + + /** + * 当前用户是否可以编辑卡座 + * @param boothId 卡座ID + * @return 是否可以编辑 + */ + boolean canEdit(Long boothId); + + /** + * 当前用户是否可以删除 + * @param ids 卡座ID几何 + * @return 是否可以删除 + */ + boolean canDeleteAll(List ids); +} diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/booth/service/impl/BoothServiceImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/booth/service/impl/BoothServiceImpl.java index 14a7b7e..8c7e703 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/booth/service/impl/BoothServiceImpl.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/booth/service/impl/BoothServiceImpl.java @@ -1,7 +1,12 @@ package com.ruoyi.bst.booth.service.impl; import java.util.List; + +import com.github.pagehelper.PageHelper; +import com.ruoyi.bst.part.domain.PartVO; +import com.ruoyi.bst.part.service.PartService; import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.collection.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.bst.booth.mapper.BoothMapper; @@ -21,19 +26,33 @@ public class BoothServiceImpl implements BoothService { @Autowired private BoothMapper boothMapper; + @Autowired + private PartService partService; /** * 查询卡座 * - * @param boothId 卡座主键 + * @param scope 卡座主键 * @return 卡座 */ @Override - public BoothVO selectBoothByBoothId(Long boothId) + public BoothVO selectBoothByBoothId(Long id, boolean scope) { - return boothMapper.selectBoothByBoothId(boothId); + if (id == null) { + return null; + } + BoothQuery query = new BoothQuery(); + query.setBoothId(id); + query.setScope(scope); + return this.selectOne(query); } + @Override + public BoothVO selectOne(BoothQuery query) { + PageHelper.startPage(1, 1); + List list = this.selectBoothList(query); + return CollectionUtils.firstElement(list); + } /** * 查询卡座列表 * @@ -78,7 +97,7 @@ public class BoothServiceImpl implements BoothService * @return 结果 */ @Override - public int deleteBoothByBoothIds(Long[] boothIds) + public int deleteBoothByBoothIds(List boothIds) { return boothMapper.deleteBoothByBoothIds(boothIds); } @@ -94,4 +113,10 @@ public class BoothServiceImpl implements BoothService { return boothMapper.deleteBoothByBoothId(boothId); } + + @Override + public Long getUserId(Booth booth) { + PartVO part = partService.selectPartById(booth.getPartId()); + return partService.getUserId(part); + } } diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/booth/service/impl/BoothValidatorImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/booth/service/impl/BoothValidatorImpl.java new file mode 100644 index 0000000..2389a86 --- /dev/null +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/booth/service/impl/BoothValidatorImpl.java @@ -0,0 +1,54 @@ +package com.ruoyi.bst.booth.service.impl; + +import com.ruoyi.bst.booth.domain.BoothQuery; +import com.ruoyi.bst.booth.mapper.BoothMapper; +import com.ruoyi.bst.booth.service.BoothValidator; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.collection.CollectionUtils; +import org.springframework.stereotype.Service; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; + +@Service +public class BoothValidatorImpl implements BoothValidator { + + private final BoothMapper boothMapper; + + public BoothValidatorImpl(BoothMapper boothMapper) { + this.boothMapper = boothMapper; + } + + @Override + public boolean canEdit(Long boothId) { + return canOperate(Arrays.asList(boothId)); + } + + @Override + public boolean canDeleteAll(List ids) { + return canOperate(ids); + } + + // 是否可以操作运营区 + private boolean canOperate(List boothIds) { + return hasPermission(boothIds); + } + + // 是否有运营区权限 + private boolean hasPermission(List boothIds) { + if (SecurityUtils.isSysAdmin()) { + return true; + } + if (CollectionUtils.isEmptyElement(boothIds)) { + return true; + } + // 查询运营区 + BoothQuery query = new BoothQuery(); + query.setIds(boothIds); + query.setScope(true); + List boothIdList = boothMapper.selectIdByQuery(query); + return new HashSet<>(boothIdList).containsAll(boothIds); + } + +} diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/floor/domain/Floor.java b/ruoyi-service/src/main/java/com/ruoyi/bst/floor/domain/Floor.java new file mode 100644 index 0000000..6537343 --- /dev/null +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/floor/domain/Floor.java @@ -0,0 +1,40 @@ +package com.ruoyi.bst.floor.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 楼层列表对象 bst_floor + * + * @author ruoyi + * @date 2025-04-22 + */ +@Data +public class Floor extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + private Long floorId; + + @Excel(name = "分区ID") + @ApiModelProperty("分区ID") + @NotNull(message = "分区ID不能为空") + private Long storeId; + + @Excel(name = "楼层名称") + @ApiModelProperty("楼层名称") + @NotBlank(message = "楼层名称不能为空") + private String floorName; + + @Excel(name = "楼层图片") + @ApiModelProperty("楼层图片") + private String picture; + +} diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/floor/domain/FloorQuery.java b/ruoyi-service/src/main/java/com/ruoyi/bst/floor/domain/FloorQuery.java new file mode 100644 index 0000000..8b730c5 --- /dev/null +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/floor/domain/FloorQuery.java @@ -0,0 +1,14 @@ +package com.ruoyi.bst.floor.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class FloorQuery extends FloorVO{ + + @ApiModelProperty("楼层ID列表") + private List ids; + +} diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/floor/domain/FloorVO.java b/ruoyi-service/src/main/java/com/ruoyi/bst/floor/domain/FloorVO.java new file mode 100644 index 0000000..7cc9733 --- /dev/null +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/floor/domain/FloorVO.java @@ -0,0 +1,17 @@ +package com.ruoyi.bst.floor.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class FloorVO extends Floor{ + + @ApiModelProperty("楼层ID列表") + private List ids; + + @ApiModelProperty("店铺名称") + private String storeName; + +} diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/floor/mapper/FloorMapper.java b/ruoyi-service/src/main/java/com/ruoyi/bst/floor/mapper/FloorMapper.java new file mode 100644 index 0000000..594c5db --- /dev/null +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/floor/mapper/FloorMapper.java @@ -0,0 +1,77 @@ +package com.ruoyi.bst.floor.mapper; + +import java.util.List; +import com.ruoyi.bst.floor.domain.Floor; +import com.ruoyi.bst.floor.domain.FloorVO; +import com.ruoyi.bst.floor.domain.FloorQuery; +import com.ruoyi.bst.part.domain.PartQuery; +import org.apache.ibatis.annotations.Param; + +/** + * 楼层列表Mapper接口 + * + * @author ruoyi + * @date 2025-04-22 + */ +public interface FloorMapper +{ + /** + * 查询楼层列表 + * + * @param floorId 楼层列表主键 + * @return 楼层列表 + */ + FloorVO selectFloorByFloorId(Long floorId); + + /** + * 查询楼层列表列表 + * + * @param query 楼层列表 + * @return 楼层列表集合 + */ + List selectFloorList(@Param("query")FloorQuery query); + + /** + * 新增楼层列表 + * + * @param floor 楼层列表 + * @return 结果 + */ + int insertFloor(Floor floor); + + /** + * 批量新增楼层列表 + */ + int batchInsert(@Param("list") List list); + + /** + * 批量修改楼层列表 + */ + int batchUpdate(@Param("list") List list); + + /** + * 修改楼层列表 + * + * @param floor 楼层列表 + * @return 结果 + */ + public int updateFloor(@Param("data") Floor floor); + + /** + * 删除楼层列表 + * + * @param floorId 楼层列表主键 + * @return 结果 + */ + int deleteFloorByFloorId(Long floorId); + + /** + * 批量删除楼层列表 + * + * @param floorIds 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteFloorByFloorIds(List floorIds); + + List selectIdByQuery(FloorQuery query); +} diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/floor/mapper/FloorMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/floor/mapper/FloorMapper.xml new file mode 100644 index 0000000..40248e2 --- /dev/null +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/floor/mapper/FloorMapper.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + select + bf.floor_id, + bf.store_id, + bf.floor_name, + bf.picture, + bf.create_time, + bs.user_id, + bs.store_name as storeName + + + + + from bst_floor bf + left join bst_store bs on bf.store_id = bs.store_id + + + + and store_id = #{query.storeId} + and floor_name like concat('%', #{query.floorName}, '%') + and picture = #{query.picture} + and bs.store_name like concat('%', #{query.storeName}, '%') + ${@com.ruoyi.framework.util.DataScopeUtil@create(query.scope) + .userSetAlias("bs.user_id") + .build() + } + ${query.params.dataScope} + + + + + + + + + + + + + insert into bst_floor + + store_id, + floor_name, + picture, + create_time, + + + #{storeId}, + #{floorName}, + #{picture}, + #{createTime}, + + + + + insert into bst_floor + + store_id, + floor_name, + picture, + create_time, + + values + + + #{i.storeId}, + default, + #{i.floorName}, + default, + #{i.picture}, + default, + #{i.createTime}, + default, + + + + + + update bst_floor + + + + + WHEN #{item.floor_id} THEN #{item.storeId} + + + WHEN #{item.floor_id} THEN `store_id` + + + + + + + WHEN #{item.floor_id} THEN #{item.floorName} + + + WHEN #{item.floor_id} THEN `floor_name` + + + + + + + WHEN #{item.floor_id} THEN #{item.picture} + + + WHEN #{item.floor_id} THEN `picture` + + + + + + + WHEN #{item.floor_id} THEN #{item.createTime} + + + WHEN #{item.floor_id} THEN `create_time` + + + + + where floor_id in + + #{item.floorId} + + + + + update bst_floor + + + + where floor_id = #{data.floorId} + + + + store_id = #{data.storeId}, + floor_name = #{data.floorName}, + picture = #{data.picture}, + create_time = #{data.createTime}, + + + + delete from bst_floor where floor_id = #{floorId} + + + + delete from bst_floor where floor_id in + + #{floorId} + + + diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/floor/service/FloorService.java b/ruoyi-service/src/main/java/com/ruoyi/bst/floor/service/FloorService.java new file mode 100644 index 0000000..2cc3539 --- /dev/null +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/floor/service/FloorService.java @@ -0,0 +1,70 @@ +package com.ruoyi.bst.floor.service; + +import java.util.List; +import com.ruoyi.bst.floor.domain.Floor; +import com.ruoyi.bst.floor.domain.FloorVO; +import com.ruoyi.bst.floor.domain.FloorQuery; + +/** + * 楼层列表Service接口 + * + * @author ruoyi + * @date 2025-04-22 + */ +public interface FloorService +{ + /** + * 查询楼层列表 + * + * @param id 楼层列表主键 + * @return 楼层列表 + */ + public FloorVO selectFloorByFloorId(Long id, boolean scope); + + default FloorVO selectFloorByFloorId(Long id) { + return this.selectFloorByFloorId(id, false); + } + + public FloorVO selectOne(FloorQuery floorQuery); + + + /** + * 查询楼层列表列表 + * + * @param floor 楼层列表 + * @return 楼层列表集合 + */ + public List selectFloorList(FloorQuery floor); + + /** + * 新增楼层列表 + * + * @param floor 楼层列表 + * @return 结果 + */ + public int insertFloor(Floor floor); + + /** + * 修改楼层列表 + * + * @param floor 楼层列表 + * @return 结果 + */ + public int updateFloor(Floor floor); + + /** + * 批量删除楼层列表 + * + * @param floorIds 需要删除的楼层列表主键集合 + * @return 结果 + */ + public int deleteFloorByFloorIds(List floorIds); + + /** + * 删除楼层列表信息 + * + * @param floorId 楼层列表主键 + * @return 结果 + */ + public int deleteFloorByFloorId(Long floorId); +} diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/floor/service/FloorValidator.java b/ruoyi-service/src/main/java/com/ruoyi/bst/floor/service/FloorValidator.java new file mode 100644 index 0000000..b170a6a --- /dev/null +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/floor/service/FloorValidator.java @@ -0,0 +1,29 @@ +package com.ruoyi.bst.floor.service; + +import java.util.List; + +public interface FloorValidator { + + + /** + * 判断当前用户是否可以选择楼层 + * @param floorId 楼层ID + * @return 是否允许 + */ + boolean canCheckForFloor(Long floorId); + + + /** + * 当前用户是否可以编辑楼层 + * @param floorId 楼层ID + * @return 是否可以编辑 + */ + boolean canEdit(Long floorId); + + /** + * 当前用户是否可以删除楼层 + * @param floorIds 楼层ID列表 + * @return 是否可以删除 + */ + boolean canDeleteAll(List floorIds); +} diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/floor/service/impl/FloorServiceImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/floor/service/impl/FloorServiceImpl.java new file mode 100644 index 0000000..cf53977 --- /dev/null +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/floor/service/impl/FloorServiceImpl.java @@ -0,0 +1,112 @@ +package com.ruoyi.bst.floor.service.impl; + +import java.util.List; + +import com.github.pagehelper.PageHelper; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.collection.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.bst.floor.mapper.FloorMapper; +import com.ruoyi.bst.floor.domain.Floor; +import com.ruoyi.bst.floor.domain.FloorVO; +import com.ruoyi.bst.floor.domain.FloorQuery; +import com.ruoyi.bst.floor.service.FloorService; + +/** + * 楼层列表Service业务层处理 + * + * @author ruoyi + * @date 2025-04-22 + */ +@Service +public class FloorServiceImpl implements FloorService +{ + @Autowired + private FloorMapper floorMapper; + + /** + * 查询楼层列表 + * + * @param id 楼层列表主键 + * @return 楼层列表 + */ + @Override + public FloorVO selectFloorByFloorId(Long id, boolean scope) + { + if (id == null) { + return null; + } + FloorQuery query = new FloorQuery(); + query.setFloorId(id); + query.setScope(scope); + return this.selectOne(query); + } + + @Override + public FloorVO selectOne(FloorQuery query) { + PageHelper.startPage(1, 1); + List list = floorMapper.selectFloorList(query); + return CollectionUtils.firstElement(list); + } + /** + * 查询楼层列表列表 + * + * @param floor 楼层列表 + * @return 楼层列表 + */ + @Override + public List selectFloorList(FloorQuery floor) + { + return floorMapper.selectFloorList(floor); + } + + /** + * 新增楼层列表 + * + * @param floor 楼层列表 + * @return 结果 + */ + @Override + public int insertFloor(Floor floor) + { + floor.setCreateTime(DateUtils.getNowDate()); + return floorMapper.insertFloor(floor); + } + + /** + * 修改楼层列表 + * + * @param floor 楼层列表 + * @return 结果 + */ + @Override + public int updateFloor(Floor floor) + { + return floorMapper.updateFloor(floor); + } + + /** + * 批量删除楼层列表 + * + * @param floorIds 需要删除的楼层列表主键 + * @return 结果 + */ + @Override + public int deleteFloorByFloorIds(List floorIds) + { + return floorMapper.deleteFloorByFloorIds(floorIds); + } + + /** + * 删除楼层列表信息 + * + * @param floorId 楼层列表主键 + * @return 结果 + */ + @Override + public int deleteFloorByFloorId(Long floorId) + { + return floorMapper.deleteFloorByFloorId(floorId); + } +} diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/floor/service/impl/FloorValidatorImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/floor/service/impl/FloorValidatorImpl.java new file mode 100644 index 0000000..1d934b0 --- /dev/null +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/floor/service/impl/FloorValidatorImpl.java @@ -0,0 +1,62 @@ +package com.ruoyi.bst.floor.service.impl; + +import com.ruoyi.bst.floor.domain.FloorQuery; +import com.ruoyi.bst.floor.mapper.FloorMapper; +import com.ruoyi.bst.floor.service.FloorValidator; +import com.ruoyi.bst.part.domain.PartQuery; +import com.ruoyi.bst.part.mapper.PartMapper; +import com.ruoyi.bst.part.service.PartValidator; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.collection.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; + +@Service +public class FloorValidatorImpl implements FloorValidator { + + @Autowired + private PartMapper partMapper; + @Autowired + private FloorMapper floorMapper; + + @Override + public boolean canCheckForFloor(Long partId) { + return canOperate(Arrays.asList(partId)); + } + + @Override + public boolean canEdit(Long partId) { + return canOperate(Arrays.asList(partId)); + } + + @Override + public boolean canDeleteAll(List partIds) { + return canOperate(partIds); + } + + // 是否可以操作运营区 + private boolean canOperate(List partIds) { + return hasPermission(partIds); + } + + // 是否有运营区权限 + private boolean hasPermission(List partIds) { + if (SecurityUtils.isSysAdmin()) { + return true; + } + if (CollectionUtils.isEmptyElement(partIds)) { + return true; + } + // 查询运营区 + FloorQuery query = new FloorQuery(); + query.setIds(partIds); + query.setScope(true); + List floorList = floorMapper.selectIdByQuery(query); + return new HashSet<>(floorList).containsAll(partIds); + } + +} diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/part/domain/PartVO.java b/ruoyi-service/src/main/java/com/ruoyi/bst/part/domain/PartVO.java index 0e08290..36ae279 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/part/domain/PartVO.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/part/domain/PartVO.java @@ -11,4 +11,9 @@ public class PartVO extends Part{ @ApiModelProperty("楼层名称") private String floorName; + @Excel(name = "所属店铺") + @ApiModelProperty("所属店铺") + private String storeName; + + } diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/part/mapper/PartMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/part/mapper/PartMapper.xml index 0b711cd..95b84cc 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/part/mapper/PartMapper.xml +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/part/mapper/PartMapper.xml @@ -21,7 +21,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" bp.create_time, bs.store_name, bs.user_id, - bf.floor_name as floorName + bf.floor_name as floorName, + bs.store_name as storeName @@ -37,6 +38,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and part_name like concat('%', #{query.partName}, '%') and picture = #{query.picture} and bf.floor_name like concat('%', #{query.floorName}, '%') + and bs.store_name like concat('%', #{query.storeName}, '%') ${@com.ruoyi.framework.util.DataScopeUtil@create(query.scope) .userSetAlias("bs.user_id") .build() diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/store/domain/Store.java b/ruoyi-service/src/main/java/com/ruoyi/bst/store/domain/Store.java index 86749b8..389ac60 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/store/domain/Store.java +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/store/domain/Store.java @@ -73,6 +73,18 @@ public class Store extends BaseEntity @NotBlank(message = "详细地址不能为空",groups = {ValidGroup.Create.class}) private String address; + @Excel(name = "省") + @ApiModelProperty("省") + private String province; + + @Excel(name = "市") + @ApiModelProperty("市") + private String city; + + @Excel(name = "区、县") + @ApiModelProperty("区、县") + private String county; + @Excel(name = "门店照片") @ApiModelProperty("门店照片") private String picture; diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/store/mapper/StoreMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/store/mapper/StoreMapper.xml index 38bb4d0..bf9572a 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/bst/store/mapper/StoreMapper.xml +++ b/ruoyi-service/src/main/java/com/ruoyi/bst/store/mapper/StoreMapper.xml @@ -12,6 +12,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + @@ -33,6 +36,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" bs.latitude, bs.address, bs.picture, + bs.province, + bs.city, + bs.county, bs.create_time from bst_store bs @@ -49,6 +55,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and latitude = #{query.latitude} and address like concat('%', #{query.address}, '%') and picture = #{query.picture} + and province = #{query.province} + and city = #{query.city} + and county = #{query.county} and deleted = #{query.deleted} ${@com.ruoyi.framework.util.DataScopeUtil@create(query.scope) .userSetAlias("bs.user_id") @@ -82,6 +91,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" latitude, address, picture, + province, + city, + county, create_time, @@ -95,6 +107,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{latitude}, #{address}, #{picture}, + #{province}, + #{city}, + #{county}, #{createTime}, @@ -282,6 +297,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" latitude = #{data.latitude}, address = #{data.address}, picture = #{data.picture}, + province = #{data.province}, + city = #{data.city}, + county = #{data.county}, create_time = #{data.createTime}, diff --git a/ruoyi-service/src/main/java/com/ruoyi/system/user/service/UserValidator.java b/ruoyi-service/src/main/java/com/ruoyi/system/user/service/UserValidator.java index a86b881..f2d776e 100644 --- a/ruoyi-service/src/main/java/com/ruoyi/system/user/service/UserValidator.java +++ b/ruoyi-service/src/main/java/com/ruoyi/system/user/service/UserValidator.java @@ -33,4 +33,5 @@ public interface UserValidator { */ boolean canView(List userIds); + } diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/bst/BoothController.java b/ruoyi-web/src/main/java/com/ruoyi/web/bst/BoothController.java index 7ad7664..e3dfb62 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/bst/BoothController.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/bst/BoothController.java @@ -4,12 +4,15 @@ import com.ruoyi.bst.booth.domain.Booth; import com.ruoyi.bst.booth.domain.BoothQuery; import com.ruoyi.bst.booth.domain.BoothVO; import com.ruoyi.bst.booth.service.BoothService; +import com.ruoyi.bst.booth.service.BoothValidator; +import com.ruoyi.bst.part.service.PartValidator; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.user.service.UserValidator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @@ -29,6 +32,10 @@ public class BoothController extends BaseController { @Autowired private BoothService boothService; + @Autowired + private PartValidator partValidator; + @Autowired + private BoothValidator boothValidator; /** * 查询卡座列表 @@ -39,6 +46,7 @@ public class BoothController extends BaseController { startPage(); startOrderBy(); + query.setScope(true); List list = boothService.selectBoothList(query); return getDataTable(list); } @@ -51,6 +59,7 @@ public class BoothController extends BaseController @PostMapping("/export") public void export(HttpServletResponse response, BoothQuery query) { + query.setScope(true); List list = boothService.selectBoothList(query); ExcelUtil util = new ExcelUtil(BoothVO.class); util.exportExcel(response, list, "卡座数据"); @@ -63,7 +72,7 @@ public class BoothController extends BaseController @GetMapping(value = "/{boothId}") public AjaxResult getInfo(@PathVariable("boothId") Long boothId) { - return success(boothService.selectBoothByBoothId(boothId)); + return success(boothService.selectBoothByBoothId(boothId,true)); } /** @@ -74,6 +83,10 @@ public class BoothController extends BaseController @PostMapping public AjaxResult add(@RequestBody Booth booth) { + // 判断用户能否选择分区 + if (!partValidator.canCheckForPart(booth.getPartId())) { + return AjaxResult.error("您无权选择ID为" + booth.getPartId() + "的分区"); + } return toAjax(boothService.insertBooth(booth)); } @@ -85,6 +98,9 @@ public class BoothController extends BaseController @PutMapping public AjaxResult edit(@RequestBody Booth booth) { + if (!boothValidator.canEdit(booth.getBoothId())) { + return AjaxResult.error("您没有权限修改ID为" + booth.getBoothId() + "的卡座"); + } return toAjax(boothService.updateBooth(booth)); } @@ -93,9 +109,12 @@ public class BoothController extends BaseController */ @PreAuthorize("@ss.hasPermi('bst:booth:remove')") @Log(title = "卡座", businessType = BusinessType.DELETE) - @DeleteMapping("/{boothIds}") - public AjaxResult remove(@PathVariable Long[] boothIds) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable List ids) { - return toAjax(boothService.deleteBoothByBoothIds(boothIds)); + if (!boothValidator.canDeleteAll(ids)) { + return AjaxResult.error("您没有权限删除ID为" + ids + "的卡座"); + } + return toAjax(boothService.deleteBoothByBoothIds(ids)); } } diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/bst/FloorController.java b/ruoyi-web/src/main/java/com/ruoyi/web/bst/FloorController.java new file mode 100644 index 0000000..ac41c4a --- /dev/null +++ b/ruoyi-web/src/main/java/com/ruoyi/web/bst/FloorController.java @@ -0,0 +1,119 @@ +package com.ruoyi.web.bst; + +import com.ruoyi.bst.floor.domain.Floor; +import com.ruoyi.bst.floor.domain.FloorQuery; +import com.ruoyi.bst.floor.domain.FloorVO; +import com.ruoyi.bst.floor.service.FloorService; +import com.ruoyi.bst.floor.service.FloorValidator; +import com.ruoyi.bst.store.service.StoreValidator; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 楼层列表Controller + * + * @author ruoyi + * @date 2025-04-22 + */ +@RestController +@RequestMapping("/bst/floor") +public class FloorController extends BaseController +{ + @Autowired + private FloorService floorService; + @Autowired + private StoreValidator storeValidator; + @Autowired + private FloorValidator floorValidator; + + /** + * 查询楼层列表列表 + */ + @PreAuthorize("@ss.hasPermi('bst:floor:list')") + @GetMapping("/list") + public TableDataInfo list(FloorQuery query) + { + startPage(); + startOrderBy(); + query.setScope(true); + List list = floorService.selectFloorList(query); + return getDataTable(list); + } + + /** + * 导出楼层列表列表 + */ + @PreAuthorize("@ss.hasPermi('bst:floor:export')") + @Log(title = "楼层列表", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, FloorQuery query) + { + query.setScope(true); + List list = floorService.selectFloorList(query); + ExcelUtil util = new ExcelUtil(FloorVO.class); + util.exportExcel(response, list, "楼层列表数据"); + } + + /** + * 获取楼层列表详细信息 + */ + @PreAuthorize("@ss.hasPermi('bst:floor:query')") + @GetMapping(value = "/{floorId}") + public AjaxResult getInfo(@PathVariable("floorId") Long floorId) + { + return success(floorService.selectFloorByFloorId(floorId,true)); + } + + /** + * 新增楼层列表 + */ + @PreAuthorize("@ss.hasPermi('bst:floor:add')") + @Log(title = "楼层列表", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody Floor floor) + { + // 判断能否选择店铺 + if (!storeValidator.canCheckForStore(floor.getStoreId())) { + return AjaxResult.error("您无权选择ID为" + floor.getStoreId() + "的店铺"); + } + return toAjax(floorService.insertFloor(floor)); + } + + /** + * 修改楼层列表 + */ + @PreAuthorize("@ss.hasPermi('bst:floor:edit')") + @Log(title = "楼层列表", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody Floor floor) + { + if (!floorValidator.canEdit(floor.getFloorId())) { + return AjaxResult.error("您没有权限修改ID为" + floor.getFloorId() + "的楼层"); + } + return toAjax(floorService.updateFloor(floor)); + } + + /** + * 删除楼层列表 + */ + @PreAuthorize("@ss.hasPermi('bst:floor:remove')") + @Log(title = "楼层列表", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable List ids) + { + if (!floorValidator.canDeleteAll(ids)) { + return AjaxResult.error("您没有权限删除ID为" + ids + "的楼层"); + } + return toAjax(floorService.deleteFloorByFloorIds(ids)); + } +}