diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/app/mapper/AppMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/app/mapper/AppMapper.xml
index 8ab9cb8..f90d9fc 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/app/mapper/AppMapper.xml
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/app/mapper/AppMapper.xml
@@ -26,7 +26,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
left join sys_user su on bua.user_id = su.user_id
-
and ba.id = #{query.id}
and ba.name like concat('%', #{query.name}, '%')
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/complaint/mapper/ComplaintMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/complaint/mapper/ComplaintMapper.xml
index 63b4f55..5ce6a3a 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/complaint/mapper/ComplaintMapper.xml
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/complaint/mapper/ComplaintMapper.xml
@@ -35,7 +35,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and type = #{query.type}
and picture = #{query.picture}
and contact like concat('%', #{query.contact}, '%')
- and su.userName like concat('%', #{query.userName}, '%')
+ and su.user_name like concat('%', #{query.userName}, '%')
${query.params.dataScope}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/location/domain/Location.java b/ruoyi-service/src/main/java/com/ruoyi/bst/location/domain/Location.java
index 6bd8f1e..592eb62 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/location/domain/Location.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/location/domain/Location.java
@@ -1,5 +1,6 @@
package com.ruoyi.bst.location.domain;
+import com.ruoyi.common.core.validate.ValidGroup;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
@@ -7,6 +8,9 @@ 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_location
*
@@ -22,10 +26,12 @@ public class Location extends BaseEntity
@Excel(name = "店铺ID")
@ApiModelProperty("店铺ID")
+ @NotNull(message = "店铺ID不能为空",groups = {ValidGroup.Create.class})
private Long storeId;
@Excel(name = "位置名称")
@ApiModelProperty("位置名称")
+ @NotBlank(message = "位置名称不能为空",groups = {ValidGroup.Create.class})
private String name;
}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/location/domain/LocationQuery.java b/ruoyi-service/src/main/java/com/ruoyi/bst/location/domain/LocationQuery.java
index f9debf3..7f91c88 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/location/domain/LocationQuery.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/location/domain/LocationQuery.java
@@ -1,7 +1,14 @@
package com.ruoyi.bst.location.domain;
+import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import java.util.List;
+
@Data
public class LocationQuery extends LocationVO{
+
+ @ApiModelProperty("位置ID列表")
+ private List locationIds;
+
}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/location/domain/LocationVO.java b/ruoyi-service/src/main/java/com/ruoyi/bst/location/domain/LocationVO.java
index aeaaa16..82dce48 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/location/domain/LocationVO.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/location/domain/LocationVO.java
@@ -1,7 +1,12 @@
package com.ruoyi.bst.location.domain;
+import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class LocationVO extends Location{
+
+ @ApiModelProperty("当前位置物品数量")
+ private Integer currentNum;
+
}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/location/mapper/LocationMapper.java b/ruoyi-service/src/main/java/com/ruoyi/bst/location/mapper/LocationMapper.java
index 0aff4ba..7fc229f 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/location/mapper/LocationMapper.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/location/mapper/LocationMapper.java
@@ -70,5 +70,7 @@ public interface LocationMapper
* @param ids 需要删除的数据主键集合
* @return 结果
*/
- public int deleteLocationByIds(Long[] ids);
+ public int deleteLocationByIds(List ids);
+
+ List selectIdByQuery(@Param("query") LocationQuery query);
}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/location/mapper/LocationMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/location/mapper/LocationMapper.xml
index a1b4e0e..f9c4ffd 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/location/mapper/LocationMapper.xml
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/location/mapper/LocationMapper.xml
@@ -1,29 +1,47 @@
+ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+ "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
-
-
-
+
+
+
+
select
- id,
- store_id,
- name,
- create_time
- from bst_location
+ bl.id,
+ bl.store_id,
+ bl.name,
+ bl.create_time
+ from
+
+
+
+
+ bst_location
+ bl
+ left join bst_store bs on bl.store_id = bs.store_id
- and id = #{query.id}
- and store_id = #{query.storeId}
- and name like concat('%', #{query.name}, '%')
+ and bl.id = #{query.id}
+ and bl.store_id = #{query.storeId}
+ and bl.name like concat('%', #{query.name}, '%')
+
+ and bl.id in
+
+ #{ids}
+
+
+ ${@com.ruoyi.framework.util.DataScopeUtil@create(query.scope)
+ .userSetAlias("bs.user_id")
+ .storeAlias("bl.store_id",query.storePermissions)
+ .build()
+ }
${query.params.dataScope}
@@ -39,18 +57,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{id}
+
+
insert into bst_location
store_id,
name,
create_time,
-
+
#{storeId},
#{name},
#{createTime},
-
+
@@ -128,7 +154,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- delete from bst_location where id = #{id}
+ delete
+ from bst_location
+ where id = #{id}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/location/service/LocationAssembler.java b/ruoyi-service/src/main/java/com/ruoyi/bst/location/service/LocationAssembler.java
new file mode 100644
index 0000000..65a2be3
--- /dev/null
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/location/service/LocationAssembler.java
@@ -0,0 +1,17 @@
+package com.ruoyi.bst.location.service;
+
+import com.ruoyi.bst.location.domain.LocationVO;
+import com.ruoyi.bst.team.domain.TeamVO;
+
+import java.util.List;
+
+public interface LocationAssembler {
+
+ /**
+ * 拼接存酒数量
+ * @param list
+ */
+ void assembleStorageNum(List list);
+
+
+}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/location/service/LocationService.java b/ruoyi-service/src/main/java/com/ruoyi/bst/location/service/LocationService.java
index 0ac03e0..d60812e 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/location/service/LocationService.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/location/service/LocationService.java
@@ -19,8 +19,13 @@ public interface LocationService
* @param id 存放位置主键
* @return 存放位置
*/
- public LocationVO selectLocationById(Long id);
+ public LocationVO selectLocationById(Long id,boolean scope);
+ default LocationVO selectLocationById(Long id){
+ return this.selectLocationById(id,false);
+ }
+
+ public LocationVO selectOne(LocationQuery query);
/**
* 查询存放位置列表
*
@@ -51,7 +56,7 @@ public interface LocationService
* @param ids 需要删除的存放位置主键集合
* @return 结果
*/
- public int deleteLocationByIds(Long[] ids);
+ public int deleteLocationByIds(List ids);
/**
* 删除存放位置信息
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/location/service/LocationValidator.java b/ruoyi-service/src/main/java/com/ruoyi/bst/location/service/LocationValidator.java
new file mode 100644
index 0000000..df3b0c0
--- /dev/null
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/location/service/LocationValidator.java
@@ -0,0 +1,21 @@
+package com.ruoyi.bst.location.service;
+
+import java.util.List;
+
+public interface LocationValidator {
+
+ /**
+ * 判断当前用户是否可以修改位置信息
+ * @param locationId 位置ID
+ * @return 是否允许
+ */
+ boolean canEdit(Long locationId);
+
+ /**
+ * 判断当前用户是否可以删除位置信息
+ * @param locationIds 位置ID集合
+ * @return 是否允许
+ */
+ boolean canDelete(List locationIds);
+
+}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/location/service/impl/LocationAssemblerImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/location/service/impl/LocationAssemblerImpl.java
new file mode 100644
index 0000000..ce032ea
--- /dev/null
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/location/service/impl/LocationAssemblerImpl.java
@@ -0,0 +1,51 @@
+package com.ruoyi.bst.location.service.impl;
+
+import com.ruoyi.bst.location.domain.LocationQuery;
+import com.ruoyi.bst.location.domain.LocationVO;
+import com.ruoyi.bst.location.service.LocationAssembler;
+import com.ruoyi.bst.location.service.LocationService;
+import com.ruoyi.bst.storage.domain.StorageQuery;
+import com.ruoyi.bst.storage.domain.StorageVO;
+import com.ruoyi.bst.storage.service.StorageService;
+import com.ruoyi.bst.team.domain.TeamVO;
+import com.ruoyi.bst.team.service.TeamAssembler;
+import com.ruoyi.bst.teamUser.domain.TeamUserQuery;
+import com.ruoyi.bst.teamUser.domain.TeamUserVO;
+import com.ruoyi.bst.teamUser.domain.enums.RoleType;
+import com.ruoyi.bst.teamUser.service.TeamUserService;
+import com.ruoyi.common.utils.collection.CollectionUtils;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service
+public class LocationAssemblerImpl implements LocationAssembler {
+
+ @Autowired
+ private StorageService storageService;
+
+ @Override
+ public void assembleStorageNum(List list) {
+ if (CollectionUtils.isEmptyElement(list)) {
+ return;
+ }
+
+ List locationIds = CollectionUtils.map(list, LocationVO::getId);
+ StorageQuery query = new StorageQuery();
+
+ query.setLocationIds(locationIds);
+ List storageList = storageService.selectCurrentNum(query);
+ Map idToCurrentNum = storageList.stream().collect(Collectors.toMap(StorageVO::getLocationId, StorageVO::getCurrentNum));
+
+ for (LocationVO location : list) {
+ Integer currentNum = idToCurrentNum.get(location.getId());
+ location.setCurrentNum(currentNum);
+ }
+ }
+
+}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/location/service/impl/LocationServiceImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/location/service/impl/LocationServiceImpl.java
index 9145a50..db53799 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/location/service/impl/LocationServiceImpl.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/location/service/impl/LocationServiceImpl.java
@@ -1,7 +1,17 @@
package com.ruoyi.bst.location.service.impl;
import java.util.List;
+
+import com.github.pagehelper.PageHelper;
+import com.ruoyi.bst.storage.domain.StorageQuery;
+import com.ruoyi.bst.storage.domain.StorageVO;
+import com.ruoyi.bst.storage.service.StorageService;
+import com.ruoyi.bst.storeStaff.domain.enums.StoreStaffPermission;
+import com.ruoyi.bst.team.domain.TeamQuery;
+import com.ruoyi.bst.team.domain.TeamVO;
import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.ServiceUtil;
+import com.ruoyi.common.utils.collection.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.bst.location.mapper.LocationMapper;
@@ -17,10 +27,11 @@ import com.ruoyi.bst.location.service.LocationService;
* @date 2025-06-06
*/
@Service
-public class LocationServiceImpl implements LocationService
-{
+public class LocationServiceImpl implements LocationService {
@Autowired
private LocationMapper locationMapper;
+ @Autowired
+ private StorageService storageService;
/**
* 查询存放位置
@@ -29,9 +40,22 @@ public class LocationServiceImpl implements LocationService
* @return 存放位置
*/
@Override
- public LocationVO selectLocationById(Long id)
- {
- return locationMapper.selectLocationById(id);
+ public LocationVO selectLocationById(Long id, boolean scope) {
+ if (id == null) {
+ return null;
+ }
+ LocationQuery query = new LocationQuery();
+ query.setId(id);
+ query.setScope(scope);
+ query.addStorePermission(StoreStaffPermission.LOCATION_VIEW.getCode());
+ return this.selectOne(query);
+ }
+
+ @Override
+ public LocationVO selectOne(LocationQuery query) {
+ PageHelper.startPage(1, 1);
+ List list = this.selectLocationList(query);
+ return CollectionUtils.firstElement(list);
}
/**
@@ -41,8 +65,7 @@ public class LocationServiceImpl implements LocationService
* @return 存放位置
*/
@Override
- public List selectLocationList(LocationQuery location)
- {
+ public List selectLocationList(LocationQuery location) {
return locationMapper.selectLocationList(location);
}
@@ -53,8 +76,7 @@ public class LocationServiceImpl implements LocationService
* @return 结果
*/
@Override
- public int insertLocation(Location location)
- {
+ public int insertLocation(Location location) {
location.setCreateTime(DateUtils.getNowDate());
return locationMapper.insertLocation(location);
}
@@ -66,8 +88,7 @@ public class LocationServiceImpl implements LocationService
* @return 结果
*/
@Override
- public int updateLocation(Location location)
- {
+ public int updateLocation(Location location) {
return locationMapper.updateLocation(location);
}
@@ -78,8 +99,11 @@ public class LocationServiceImpl implements LocationService
* @return 结果
*/
@Override
- public int deleteLocationByIds(Long[] ids)
- {
+ public int deleteLocationByIds(List ids) {
+ StorageQuery query = new StorageQuery();
+ query.setLocationIds(ids);
+ List storageList = storageService.selectStorageList(query);
+ ServiceUtil.assertion(storageList != null && !storageList.isEmpty(),"当前位置有物品存放,不允许删除");
return locationMapper.deleteLocationByIds(ids);
}
@@ -90,8 +114,7 @@ public class LocationServiceImpl implements LocationService
* @return 结果
*/
@Override
- public int deleteLocationById(Long id)
- {
+ public int deleteLocationById(Long id) {
return locationMapper.deleteLocationById(id);
}
}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/location/service/impl/LocationValidatorImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/location/service/impl/LocationValidatorImpl.java
new file mode 100644
index 0000000..6e9e95e
--- /dev/null
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/location/service/impl/LocationValidatorImpl.java
@@ -0,0 +1,53 @@
+package com.ruoyi.bst.location.service.impl;
+
+import com.ruoyi.bst.location.domain.LocationQuery;
+import com.ruoyi.bst.location.domain.LocationVO;
+import com.ruoyi.bst.location.mapper.LocationMapper;
+import com.ruoyi.bst.location.service.LocationValidator;
+import com.ruoyi.bst.storeStaff.domain.enums.StoreStaffPermission;
+import com.ruoyi.bst.team.domain.TeamQuery;
+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 LocationValidatorImpl implements LocationValidator {
+
+ @Autowired
+ private LocationMapper locationMapper;
+
+ @Override
+ public boolean canEdit(Long locationId) {
+ return canOperate(Arrays.asList(locationId));
+ }
+
+ @Override
+ public boolean canDelete(List locationIds) {
+ return canOperate(locationIds);
+ }
+
+ private boolean canOperate(List locationIds) {
+ return hasPermission(locationIds, StoreStaffPermission.LOCATION_EDIT.getCode());
+ }
+
+ private boolean hasPermission(List locationIds, String permission) {
+ if (SecurityUtils.isSysAdmin()) {
+ return true;
+ }
+ if (CollectionUtils.isEmptyElement(locationIds)) {
+ return true;
+ }
+ // 查询拼桌
+ LocationQuery query = new LocationQuery();
+ query.setLocationIds(locationIds);
+ query.setScope(true);
+ query.addStorePermission(permission);
+ List locationIdList = locationMapper.selectIdByQuery(query);
+ return new HashSet<>(locationIdList).containsAll(locationIds);
+ }
+}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/storage/domain/Storage.java b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/domain/Storage.java
index 34c734c..8ee292c 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/storage/domain/Storage.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/domain/Storage.java
@@ -5,6 +5,7 @@ import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.bst.specValue.domain.SpecValue;
+import com.ruoyi.common.core.validate.ValidGroup;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
@@ -12,6 +13,9 @@ 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_storage
*
@@ -27,26 +31,32 @@ public class Storage extends BaseEntity
@Excel(name = "存放位置ID")
@ApiModelProperty("存放位置ID")
+ @NotNull(message = "存放位置ID不能为空",groups = {ValidGroup.Create.class})
private Long locationId;
@Excel(name = "店铺ID")
@ApiModelProperty("店铺ID")
+ @NotNull(message = "店铺ID不能为空",groups = {ValidGroup.Create.class})
private Long storeId;
@Excel(name = "用户ID")
@ApiModelProperty("用户ID")
+ @NotNull(message = "用户ID不能为空",groups = {ValidGroup.Create.class})
private Long userId;
@Excel(name = "商品skuID")
@ApiModelProperty("商品skuID")
+ @NotNull(message = "商品skuID不能为空",groups = {ValidGroup.Create.class})
private Long skuId;
@Excel(name = "商品名称")
@ApiModelProperty("商品名称")
+ @NotBlank(message = "商品名称不能为空",groups = {ValidGroup.Create.class})
private String goodsName;
@Excel(name = "存放数量")
@ApiModelProperty("存放数量")
+ @NotNull(message = "存放数量不能为空",groups = {ValidGroup.Create.class})
private Integer totalNum;
@Excel(name = "已取数量")
@@ -59,6 +69,7 @@ public class Storage extends BaseEntity
private Date deadline;
@ApiModelProperty("规格值列表")
+ @NotNull(message = "规格值列表不能为空",groups = {ValidGroup.Create.class})
private List specValue;
}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/storage/domain/StorageQuery.java b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/domain/StorageQuery.java
index 24f12af..057a8fb 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/storage/domain/StorageQuery.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/domain/StorageQuery.java
@@ -1,7 +1,17 @@
package com.ruoyi.bst.storage.domain;
+import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import java.util.List;
+
@Data
public class StorageQuery extends StorageVO{
+
+ @ApiModelProperty("位置ID列表")
+ private List locationIds;
+
+ @ApiModelProperty("存酒信息ID列表")
+ private List storageIds;
+
}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/storage/domain/StorageVO.java b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/domain/StorageVO.java
index 6124a31..ea5c37a 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/storage/domain/StorageVO.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/domain/StorageVO.java
@@ -1,7 +1,30 @@
package com.ruoyi.bst.storage.domain;
+import com.ruoyi.common.annotation.Excel;
+import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class StorageVO extends Storage{
+
+ @ApiModelProperty("用户名称")
+ private String userName;
+
+ @ApiModelProperty("商品名称")
+ private String goodsName;
+
+ @ApiModelProperty("店铺名称")
+ private String storeName;
+
+ @ApiModelProperty("位置名称")
+ private String locationName;
+
+ @Excel(name = "当前数量")
+ @ApiModelProperty("当前数量")
+ private Integer currentNum;
+
+ public Integer getCurrentNum() {
+ return getTotalNum() - getTakenNum();
+ }
+
}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/storage/domain/dto/StorageDTO.java b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/domain/dto/StorageDTO.java
new file mode 100644
index 0000000..bc7de40
--- /dev/null
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/domain/dto/StorageDTO.java
@@ -0,0 +1,15 @@
+package com.ruoyi.bst.storage.domain.dto;
+
+import com.ruoyi.bst.storage.domain.Storage;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class StorageDTO {
+
+ @ApiModelProperty("存酒信息ID")
+ private Long storageId;
+
+ @ApiModelProperty("取酒数量")
+ private Integer number;
+}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/storage/mapper/StorageMapper.java b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/mapper/StorageMapper.java
index 1fc6805..0b8f914 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/storage/mapper/StorageMapper.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/mapper/StorageMapper.java
@@ -71,4 +71,10 @@ public interface StorageMapper
* @return 结果
*/
public int deleteStorageByIds(Long[] ids);
+
+ List selectCurrentNum(@Param("query") StorageQuery query);
+
+ List selectIdByQuery(@Param("query") StorageQuery query);
+
+ int batchGetWine(@Param("list") List toStorageUpdate);
}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/storage/mapper/StorageMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/mapper/StorageMapper.xml
index 72d0eea..32fd523 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/storage/mapper/StorageMapper.xml
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/mapper/StorageMapper.xml
@@ -1,43 +1,45 @@
+ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+ "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
select
- bst.id,
- bst.location_id,
- bst.store_id,
- bst.user_id,
- bst.sku_id,
- bst.goods_name,
- bst.total_num,
- bst.taken_num,
- bst.deadline,
- bst.spec_value,
- bst.remark,
- bst.create_time,
- bs.name as goods_name,
- bstor.name as store_name,
- su.name as user_name,
- bl.name as location_name
- from
+ bst.id,
+ bst.location_id,
+ bst.store_id,
+ bst.user_id,
+ bst.sku_id,
+ bst.goods_name,
+ bst.total_num,
+ bst.taken_num,
+ bst.deadline,
+ bst.spec_value,
+ bst.remark,
+ bst.create_time,
+ bg.name as goods_name,
+ bstor.store_name,
+ su.user_name,
+ bl.name as location_name
+ from
+
@@ -45,22 +47,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
left join bst_sku bsk on bst.sku_id = bsk.id
left join bst_goods bg on bsk.goods_id = bg.id
left join sys_user su on bst.user_id = su.user_id
- left join bst_store bstor on bst.store_id = bstor.id
+ left join bst_store bstor on bst.store_id = bstor.store_id
left join bst_location bl on bst.location_id = bl.id
- and id = #{query.id}
- and location_id = #{query.locationId}
- and store_id = #{query.storeId}
- and user_id = #{query.userId}
- and sku_id = #{query.skuId}
- and goods_name like concat('%', #{query.goodsName}, '%')
- and total_num = #{query.totalNum}
- and taken_num = #{query.takenNum}
- and deadline = #{query.deadline}
- and spec_value = #{query.specValue}
- and remark like concat('%', #{query.remark}, '%')
+ and bst.id = #{query.id}
+ and bst.location_id = #{query.locationId}
+ and bst.store_id = #{query.storeId}
+ and bst.user_id = #{query.userId}
+ and bst.sku_id = #{query.skuId}
+ and bst.goods_name like concat('%', #{query.goodsName}, '%')
+ and bst.total_num = #{query.totalNum}
+ and bst.taken_num = #{query.takenNum}
+ and bst.deadline <= #{query.deadline}
+ and bst.spec_value = #{query.specValue}
+ and bst.remark like concat('%', #{query.remark}, '%')
+ and su.user_name like concat('%', #{query.userName}, '%')
+
+ and bst.location_id in
+
+ #{ids}
+
+
+ ${@com.ruoyi.framework.util.DataScopeUtil@create(query.scope)
+ .userSetAlias("bsotr.user_id")
+ .storeAlias("bst.store_id",query.storePermissions)
+ .build()
+ }
${query.params.dataScope}
@@ -76,6 +90,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{id}
+
+
+
+
+
insert into bst_storage
@@ -90,7 +124,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
spec_value,
remark,
create_time,
-
+
#{locationId},
#{storeId},
@@ -100,10 +134,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{totalNum},
#{takenNum},
#{deadline},
- #{specValue,typeHandler=com.ruoyi.bst.storage.mapper.typehandler.SpecValueListTypeHandler,
+
+ #{specValue,typeHandler=com.ruoyi.bst.storage.mapper.typehandler.SpecValueListTypeHandler,
+
#{remark},
#{createTime},
-
+
@@ -140,7 +176,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
default,
#{i.deadline},
default,
- #{i.specValue,typeHandler=com.ruoyi.bst.storage.mapper.typehandler.SpecValueListTypeHandler},
+
+ #{i.specValue,typeHandler=com.ruoyi.bst.storage.mapper.typehandler.SpecValueListTypeHandler},
+
default,
#{i.remark},
default,
@@ -236,7 +274,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- WHEN #{item.id} THEN #{item.specValue,typeHandler=com.ruoyi.bst.storage.mapper.typehandler.SpecValueListTypeHandler}
+ WHEN #{item.id} THEN
+ #{item.specValue,typeHandler=com.ruoyi.bst.storage.mapper.typehandler.SpecValueListTypeHandler}
WHEN #{item.id} THEN `spec_value`
@@ -271,11 +310,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- update bst_storage
+ update bst_storage bst
- where id = #{data.id}
+ where bst.id = #{data.id}
+
+
+
+
+ UPDATE bst_storage bs
+ JOIN (
+
+ SELECT #{item.id} AS id, #{item.takenNum} AS delta
+
+ ) AS updates ON bs.id = updates.id
+ SET bs.taken_num = bs.taken_num + updates.delta
+ WHERE (bs.taken_num + updates.delta) <= bs.total_num
@@ -287,13 +338,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
total_num = #{data.totalNum},
taken_num = #{data.takenNum},
deadline = #{data.deadline},
- spec_value = #{data.specValue,typeHandler=com.ruoyi.bst.storage.mapper.typehandler.SpecValueListTypeHandler},
+ spec_value =
+ #{data.specValue,typeHandler=com.ruoyi.bst.storage.mapper.typehandler.SpecValueListTypeHandler},
+
remark = #{data.remark},
create_time = #{data.createTime},
- delete from bst_storage where id = #{id}
+ delete
+ from bst_storage
+ where id = #{id}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/storage/service/StorageConverter.java b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/service/StorageConverter.java
new file mode 100644
index 0000000..66b84a5
--- /dev/null
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/service/StorageConverter.java
@@ -0,0 +1,19 @@
+package com.ruoyi.bst.storage.service;
+
+
+import com.ruoyi.bst.model.domain.Model;
+import com.ruoyi.bst.storage.domain.Storage;
+
+public interface StorageConverter {
+
+ /**
+ * 创建时转换为PO
+ */
+ Storage toPoByCreate(Storage data);
+
+ /**
+ * 更新时转换为PO
+ */
+ Storage toPoByUpdate(Storage data);
+
+}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/storage/service/StorageService.java b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/service/StorageService.java
index fd25e1c..d0b6620 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/storage/service/StorageService.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/service/StorageService.java
@@ -4,6 +4,7 @@ import java.util.List;
import com.ruoyi.bst.storage.domain.Storage;
import com.ruoyi.bst.storage.domain.StorageVO;
import com.ruoyi.bst.storage.domain.StorageQuery;
+import com.ruoyi.bst.storage.domain.dto.StorageDTO;
/**
* 存酒Service接口
@@ -19,7 +20,13 @@ public interface StorageService
* @param id 存酒主键
* @return 存酒
*/
- public StorageVO selectStorageById(Long id);
+ public StorageVO selectStorageById(Long id,boolean scope);
+
+ default StorageVO selectStorageById(Long id){
+ return selectStorageById(id,false);
+ }
+
+ public StorageVO selectOne(StorageQuery query);
/**
* 查询存酒列表
@@ -62,4 +69,9 @@ public interface StorageService
public int deleteStorageById(Long id);
int storageWine(List storageList);
+
+ List selectCurrentNum(StorageQuery query);
+
+ int getWine(List list);
+
}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/storage/service/StorageValidator.java b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/service/StorageValidator.java
new file mode 100644
index 0000000..c25fcdc
--- /dev/null
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/service/StorageValidator.java
@@ -0,0 +1,23 @@
+package com.ruoyi.bst.storage.service;
+
+import java.util.List;
+
+public interface StorageValidator {
+
+ /**
+ * 判断当前用户是否可以修改存酒信息
+ * @param storageId 存酒信息ID
+ * @return 是否允许
+ */
+ boolean canEdit(Long storageId);
+
+ boolean canEdit(List storageIds);
+
+ /**
+ * 判断当前用户是否可以删除存酒信息
+ * @param storageIds 位置ID集合
+ * @return 是否允许
+ */
+ boolean canDelete(List storageIds);
+
+}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/storage/service/impl/StorageConverterImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/service/impl/StorageConverterImpl.java
new file mode 100644
index 0000000..c78895f
--- /dev/null
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/service/impl/StorageConverterImpl.java
@@ -0,0 +1,50 @@
+package com.ruoyi.bst.storage.service.impl;
+
+import com.ruoyi.bst.model.domain.Model;
+import com.ruoyi.bst.storage.domain.Storage;
+import com.ruoyi.bst.storage.service.StorageConverter;
+import org.springframework.stereotype.Service;
+
+@Service
+public class StorageConverterImpl implements StorageConverter {
+ @Override
+ public Storage toPoByCreate(Storage data) {
+ if (data == null) {
+ return null;
+ }
+ Storage po = new Storage();
+
+ po.setLocationId(data.getLocationId());
+ po.setStoreId(data.getStoreId());
+ po.setUserId(data.getUserId());
+ po.setSkuId(data.getSkuId());
+ po.setGoodsName(data.getGoodsName());
+ po.setTotalNum(data.getTotalNum());
+ po.setDeadline(data.getDeadline());
+ po.setSpecValue(data.getSpecValue());
+ po.setRemark(data.getRemark());
+
+ return po;
+ }
+
+ @Override
+ public Storage toPoByUpdate(Storage data) {
+ if (data == null) {
+ return null;
+ }
+ Storage po = new Storage();
+
+ po.setId(data.getId());
+ po.setLocationId(data.getLocationId());
+ po.setStoreId(data.getStoreId());
+ po.setUserId(data.getUserId());
+ po.setSkuId(data.getSkuId());
+ po.setGoodsName(data.getGoodsName());
+ po.setTotalNum(data.getTotalNum());
+ po.setDeadline(data.getDeadline());
+ po.setSpecValue(data.getSpecValue());
+ po.setRemark(data.getRemark());
+
+ return po;
+ }
+}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/storage/service/impl/StorageServiceImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/service/impl/StorageServiceImpl.java
index fa283f9..180c2eb 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/storage/service/impl/StorageServiceImpl.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/service/impl/StorageServiceImpl.java
@@ -1,7 +1,21 @@
package com.ruoyi.bst.storage.service.impl;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import com.github.pagehelper.PageHelper;
+import com.ruoyi.bst.location.domain.LocationQuery;
+import com.ruoyi.bst.location.domain.LocationVO;
+import com.ruoyi.bst.storage.domain.dto.StorageDTO;
+import com.ruoyi.bst.storageRecord.domain.StorageRecord;
+import com.ruoyi.bst.storageRecord.service.StorageRecordService;
+import com.ruoyi.bst.storeStaff.domain.enums.StoreStaffPermission;
import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.ServiceUtil;
+import com.ruoyi.common.utils.collection.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.bst.storage.mapper.StorageMapper;
@@ -9,6 +23,7 @@ import com.ruoyi.bst.storage.domain.Storage;
import com.ruoyi.bst.storage.domain.StorageVO;
import com.ruoyi.bst.storage.domain.StorageQuery;
import com.ruoyi.bst.storage.service.StorageService;
+import org.springframework.transaction.support.TransactionTemplate;
/**
* 存酒Service业务层处理
@@ -21,6 +36,12 @@ public class StorageServiceImpl implements StorageService
{
@Autowired
private StorageMapper storageMapper;
+ @Autowired
+ private TransactionTemplate transactionTemplate;
+ @Autowired
+ private StorageRecordService storageRecordService;
+ @Autowired
+ private StorageService storageService;
/**
* 查询存酒
@@ -29,11 +50,25 @@ public class StorageServiceImpl implements StorageService
* @return 存酒
*/
@Override
- public StorageVO selectStorageById(Long id)
+ public StorageVO selectStorageById(Long id,boolean scope)
{
- return storageMapper.selectStorageById(id);
+ if (id == null) {
+ return null;
+ }
+ StorageQuery query = new StorageQuery();
+ query.setId(id);
+ query.setScope(scope);
+ query.addStorePermission(StoreStaffPermission.STORAGE_VIEW.getCode());
+ return this.selectOne(query);
}
+
+ @Override
+ public StorageVO selectOne(StorageQuery query) {
+ PageHelper.startPage(1, 1);
+ List list = this.selectStorageList(query);
+ return CollectionUtils.firstElement(list);
+ }
/**
* 查询存酒列表
*
@@ -102,4 +137,63 @@ public class StorageServiceImpl implements StorageService
});
return storageMapper.batchInsert(storageList);
}
+
+ @Override
+ public List selectCurrentNum(StorageQuery query) {
+ return storageMapper.selectCurrentNum(query);
+ }
+
+
+ @Override
+ public int getWine(List list) {
+ // 查询需要更新的存酒信息id列表
+ List ids = list.stream()
+ .map(StorageDTO::getStorageId)
+ .collect(Collectors.toList());
+
+ // 查询出对应的map用于更新数据
+ StorageQuery query = new StorageQuery();
+ query.setStorageIds(ids);
+ Map storageMap = storageMapper.selectStorageList(query)
+ .stream()
+ .collect(Collectors.toMap(Storage::getId,Storage->Storage));
+
+ List toStorageUpdate = new ArrayList<>();
+ List toStorageRecordInsert = new ArrayList<>();
+
+ for (StorageDTO dto : list) {
+ Storage storage = storageMap.get(dto.getStorageId());
+ if (storage == null) {
+ continue;
+ }
+
+ // 生成数据用于批量取酒
+ StorageVO data = new StorageVO();
+ data.setId(storage.getId());
+ data.setTakenNum(dto.getNumber());
+ toStorageUpdate.add(data);
+
+ // 生成记录
+ StorageRecord record = new StorageRecord();
+ record.setStorageId(storage.getId());
+ record.setStoreId(storage.getStoreId());
+ record.setUserId(storage.getUserId());
+ record.setReason("用户"+storage.getUserId()+"取酒"+dto.getNumber()+"瓶");
+ record.setNumber(dto.getNumber());
+ record.setCreateTime(DateUtils.getNowDate());
+ toStorageRecordInsert.add(record);
+ }
+
+
+ Integer result = transactionTemplate.execute(status -> {
+ // 批量减少数量,根据ID限制
+ int i = storageMapper.batchGetWine(toStorageUpdate);
+ ServiceUtil.assertion(i != toStorageUpdate.size(),"物品数量不足,取酒失败");
+ // 批量插入记录
+ i = storageRecordService.batchInsert(toStorageRecordInsert);
+ ServiceUtil.assertion(i <= 0,"生成记录失败");
+ return i;
+ });
+ return result == null ? 0 : result;
+ }
}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/storage/service/impl/StorageValidatorImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/service/impl/StorageValidatorImpl.java
new file mode 100644
index 0000000..f0a26e8
--- /dev/null
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/storage/service/impl/StorageValidatorImpl.java
@@ -0,0 +1,62 @@
+package com.ruoyi.bst.storage.service.impl;
+
+import com.ruoyi.bst.location.domain.LocationQuery;
+import com.ruoyi.bst.location.mapper.LocationMapper;
+import com.ruoyi.bst.location.service.LocationValidator;
+import com.ruoyi.bst.storage.domain.StorageQuery;
+import com.ruoyi.bst.storage.mapper.StorageMapper;
+import com.ruoyi.bst.storage.service.StorageValidator;
+import com.ruoyi.bst.storeStaff.domain.enums.StoreStaffPermission;
+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 StorageValidatorImpl implements StorageValidator {
+
+
+ private final StorageMapper storageMapper;
+
+ public StorageValidatorImpl(StorageMapper storageMapper) {
+ this.storageMapper = storageMapper;
+ }
+
+ @Override
+ public boolean canEdit(Long storageId) {
+ return canOperate(Arrays.asList(storageId));
+ }
+
+ @Override
+ public boolean canEdit(List storageIds) {
+ return canOperate(storageIds);
+ }
+
+ @Override
+ public boolean canDelete(List storageIds) {
+ return canOperate(storageIds);
+ }
+
+ private boolean canOperate(List storageIds) {
+ return hasPermission(storageIds, StoreStaffPermission.STORAGE_EDIT.getCode());
+ }
+
+ private boolean hasPermission(List storageIds, String permission) {
+ if (SecurityUtils.isSysAdmin()) {
+ return true;
+ }
+ if (CollectionUtils.isEmptyElement(storageIds)) {
+ return true;
+ }
+ // 查询拼桌
+ StorageQuery query = new StorageQuery();
+ query.setStorageIds(storageIds);
+ query.setScope(true);
+ query.addStorePermission(permission);
+ List storageIdList = storageMapper.selectIdByQuery(query);
+ return new HashSet<>(storageIdList).containsAll(storageIds);
+ }
+}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/storeStaff/domain/enums/StoreStaffPermission.java b/ruoyi-service/src/main/java/com/ruoyi/bst/storeStaff/domain/enums/StoreStaffPermission.java
index 65d5c05..eb26a06 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/storeStaff/domain/enums/StoreStaffPermission.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/storeStaff/domain/enums/StoreStaffPermission.java
@@ -26,9 +26,12 @@ public enum StoreStaffPermission {
GOODS_CATEGORY_VIEW("goods:category:view","查看商品分类"),
GOODS_CATEGORY_EDIT("goods:category:edit","修改商品分类"),
GOODS_VIEW("goods:view","查看商品"),
- GOODS_EDIT("goods:edit","修改商品");
-
-
+ GOODS_EDIT("goods:edit","修改商品"),
+ LOCATION_VIEW("location:view","查看存放位置"),
+ LOCATION_EDIT("location:edit","修改存放位置"),
+ STORAGE_VIEW("storage:view","查看存酒明细"),
+ STORAGE_EDIT("storage:edit","修改存酒明细"),
+ STORAGE_RECORD_VIEW("storage:record:edit","查看取酒记录");
private final String code;
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/team/mapper/TeamMapper.java b/ruoyi-service/src/main/java/com/ruoyi/bst/team/mapper/TeamMapper.java
index 2c6a579..85c0ec5 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/team/mapper/TeamMapper.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/team/mapper/TeamMapper.java
@@ -70,7 +70,7 @@ public interface TeamMapper
* @param ids 需要删除的数据主键集合
* @return 结果
*/
- public int deleteTeamByIds(Long[] ids);
+ public int deleteTeamByIds(List ids);
int addCurrentNums(@Param("data") TeamVO vo);
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/team/mapper/TeamMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/team/mapper/TeamMapper.xml
index 41430a4..6f6d852 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/team/mapper/TeamMapper.xml
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/team/mapper/TeamMapper.xml
@@ -57,6 +57,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and bt.status = #{query.status}
and bs.store_name like concat('%', #{query.storeName}, '%')
and bb.booth_name like concat('%', #{query.boothName}, '%')
+
+ and bt.id in
+
+ #{ids}
+
+
${@com.ruoyi.framework.util.DataScopeUtil@create(query.scope)
.userSetAlias("bs.user_id")
.storeAlias("bt.store_id",query.storePermissions)
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/team/service/TeamService.java b/ruoyi-service/src/main/java/com/ruoyi/bst/team/service/TeamService.java
index 9c7e023..fb87fb1 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/team/service/TeamService.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/team/service/TeamService.java
@@ -61,7 +61,7 @@ public interface TeamService
* @param ids 需要删除的拼桌主键集合
* @return 结果
*/
- public int deleteTeamByIds(Long[] ids);
+ public int deleteTeamByIds(List ids);
/**
* 删除拼桌信息
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/team/service/TeamValidator.java b/ruoyi-service/src/main/java/com/ruoyi/bst/team/service/TeamValidator.java
index 55dc807..9a4354e 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/team/service/TeamValidator.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/team/service/TeamValidator.java
@@ -1,5 +1,7 @@
package com.ruoyi.bst.team.service;
+import java.util.List;
+
public interface TeamValidator {
/**
@@ -9,7 +11,18 @@ public interface TeamValidator {
*/
boolean canAddUser(Long teamId);
-
+ /**
+ * 判断当前用户是否可以编辑拼桌信息
+ * @param teamId 拼桌ID
+ * @return 是否允许
+ */
boolean canEdit(Long teamId);
+ /**
+ * 判断当前用户是否可以删除拼桌信息
+ * @param teamIds 拼桌ID
+ * @return 是否允许
+ */
+ boolean canDelete(List teamIds);
+
}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/team/service/impl/TeamServiceImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/team/service/impl/TeamServiceImpl.java
index dd46bb6..d3aa182 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/team/service/impl/TeamServiceImpl.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/team/service/impl/TeamServiceImpl.java
@@ -134,7 +134,7 @@ public class TeamServiceImpl implements TeamService {
* @return 结果
*/
@Override
- public int deleteTeamByIds(Long[] ids) {
+ public int deleteTeamByIds(List ids) {
return teamMapper.deleteTeamByIds(ids);
}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/team/service/impl/TeamValidatorImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/team/service/impl/TeamValidatorImpl.java
index 71f159b..ea50c20 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/team/service/impl/TeamValidatorImpl.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/team/service/impl/TeamValidatorImpl.java
@@ -39,6 +39,11 @@ public class TeamValidatorImpl implements TeamValidator {
return canOperate(Arrays.asList(teamId));
}
+ @Override
+ public boolean canDelete(List teamIds) {
+ return canOperate(teamIds);
+ }
+
// 是否可以操作拼桌队伍
private boolean canOperate(List teamIds) {
return hasPermission(teamIds, StoreStaffPermission.TEAM_EDIT.getCode());
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/teamUser/mapper/TeamUserMapper.java b/ruoyi-service/src/main/java/com/ruoyi/bst/teamUser/mapper/TeamUserMapper.java
index 04258a1..745a57c 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/teamUser/mapper/TeamUserMapper.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/teamUser/mapper/TeamUserMapper.java
@@ -82,4 +82,6 @@ public interface TeamUserMapper
List selectUserIdsByTeamId(@Param("teamId") Long teamId);
List selectDistinctTeamUserList(@Param("query") TeamUserQuery query);
+
+ List selectIdByQuery(@Param("query") TeamUserQuery query);
}
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/teamUser/mapper/TeamUserMapper.xml b/ruoyi-service/src/main/java/com/ruoyi/bst/teamUser/mapper/TeamUserMapper.xml
index 9fb7f6d..97e5f87 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/teamUser/mapper/TeamUserMapper.xml
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/teamUser/mapper/TeamUserMapper.xml
@@ -33,7 +33,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
su.avatar,
su.sex,
su_inviter.nick_name as inviter_name
- from bst_team_user btu
+ from
+
+
+
+ bst_team_user btu
left join bst_team bt on btu.team_id = bt.id
left join bst_store bs on bt.store_id = bs.store_id
left join sys_user su on btu.user_id = su.user_id
@@ -105,6 +109,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
distinct by btu.user_id
+
+
insert into bst_team_user
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/teamUser/service/TeamUserValidator.java b/ruoyi-service/src/main/java/com/ruoyi/bst/teamUser/service/TeamUserValidator.java
index 54a5308..42148bf 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/teamUser/service/TeamUserValidator.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/teamUser/service/TeamUserValidator.java
@@ -11,10 +11,10 @@ public interface TeamUserValidator {
/**
* 判断当前用户是否可以编辑拼桌信息
- * @param teamId 用户ID
+ * @param teamUserId 用户ID
* @return 是否允许
*/
- boolean canEdit(Long teamId);
+ boolean canEdit(Long teamUserId);
/**
diff --git a/ruoyi-service/src/main/java/com/ruoyi/bst/teamUser/service/impl/TeamUserValidatorImpl.java b/ruoyi-service/src/main/java/com/ruoyi/bst/teamUser/service/impl/TeamUserValidatorImpl.java
index 65de299..35b93a9 100644
--- a/ruoyi-service/src/main/java/com/ruoyi/bst/teamUser/service/impl/TeamUserValidatorImpl.java
+++ b/ruoyi-service/src/main/java/com/ruoyi/bst/teamUser/service/impl/TeamUserValidatorImpl.java
@@ -40,8 +40,8 @@ public class TeamUserValidatorImpl implements TeamUserValidator {
}
@Override
- public boolean canEdit(Long teamId) {
- return canOperate(Arrays.asList(teamId));
+ public boolean canEdit(Long teamUserId) {
+ return canOperate(Arrays.asList(teamUserId));
}
@Override
@@ -55,26 +55,24 @@ public class TeamUserValidatorImpl implements TeamUserValidator {
}
// 是否可以操作拼桌队员
- private boolean canOperate(List teamIds) {
- return hasPermission(teamIds, StoreStaffPermission.TEAM_USER_EDIT.getCode());
+ private boolean canOperate(List teamUserIds) {
+ return hasPermission(teamUserIds, StoreStaffPermission.TEAM_USER_EDIT.getCode());
}
-
- private boolean hasPermission(List teamIds, String permission) {
+ private boolean hasPermission(List teamUserIds, String permission) {
if (SecurityUtils.isSysAdmin()) {
return true;
}
- if (CollectionUtils.isEmptyElement(teamIds)) {
+ if (CollectionUtils.isEmptyElement(teamUserIds)) {
return true;
}
// 查询拼桌用户
TeamUserQuery query = new TeamUserQuery();
- query.setTeamUserIds(teamIds);
+ query.setTeamUserIds(teamUserIds);
query.setScope(true);
query.addStorePermission(permission);
- //List teamIdList = teamMapper.selectIdByQuery(query);
- //return new HashSet<>(teamIdList).containsAll(teamIds);
- return true;
+ List teamUserIdList = teamUserMapper.selectIdByQuery(query);
+ return new HashSet<>(teamUserIdList).containsAll(teamUserIds);
}
}
diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/app/AppStorageController.java b/ruoyi-web/src/main/java/com/ruoyi/web/app/AppStorageController.java
index f9cdd73..be36d23 100644
--- a/ruoyi-web/src/main/java/com/ruoyi/web/app/AppStorageController.java
+++ b/ruoyi-web/src/main/java/com/ruoyi/web/app/AppStorageController.java
@@ -1,8 +1,11 @@
package com.ruoyi.web.app;
import com.ruoyi.bst.storage.domain.Storage;
+import com.ruoyi.bst.storage.domain.StorageQuery;
import com.ruoyi.bst.storage.service.StorageService;
+import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -11,7 +14,7 @@ import java.util.List;
@RestController
@RequestMapping("/app/storage")
-public class AppStorageController {
+public class AppStorageController extends BaseController {
@Autowired
private StorageService storageService;
@@ -22,4 +25,13 @@ public class AppStorageController {
return AjaxResult.success(storageService.storageWine(storageList));
}
+ @ApiOperation("我的存酒信息")
+ @GetMapping("/myWine")
+ public TableDataInfo myWine(@RequestParam Long storeId) {
+ StorageQuery query = new StorageQuery();
+ query.setUserId(getUserId());
+ query.setStoreId(storeId);
+ return getDataTable(storageService.selectStorageList(query));
+ }
+
}
diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/bst/LocationController.java b/ruoyi-web/src/main/java/com/ruoyi/web/bst/LocationController.java
index 69a811f..c3a33bf 100644
--- a/ruoyi-web/src/main/java/com/ruoyi/web/bst/LocationController.java
+++ b/ruoyi-web/src/main/java/com/ruoyi/web/bst/LocationController.java
@@ -3,15 +3,21 @@ package com.ruoyi.web.bst;
import com.ruoyi.bst.location.domain.Location;
import com.ruoyi.bst.location.domain.LocationQuery;
import com.ruoyi.bst.location.domain.LocationVO;
+import com.ruoyi.bst.location.service.LocationAssembler;
import com.ruoyi.bst.location.service.LocationService;
+import com.ruoyi.bst.location.service.LocationValidator;
+import com.ruoyi.bst.storeStaff.domain.enums.StoreStaffPermission;
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.core.validate.ValidGroup;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
+import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
@@ -29,6 +35,10 @@ public class LocationController extends BaseController
{
@Autowired
private LocationService locationService;
+ @Autowired
+ private LocationAssembler locationAssembler;
+ @Autowired
+ private LocationValidator locationValidator;
/**
* 查询存放位置列表
@@ -39,7 +49,10 @@ public class LocationController extends BaseController
{
startPage();
startOrderBy();
+ query.setScope(true);
+ query.addStorePermission(StoreStaffPermission.LOCATION_VIEW.getCode());
List list = locationService.selectLocationList(query);
+ locationAssembler.assembleStorageNum(list);
return getDataTable(list);
}
@@ -51,6 +64,7 @@ public class LocationController extends BaseController
@PostMapping("/export")
public void export(HttpServletResponse response, LocationQuery query)
{
+ query.setScope(true);
List list = locationService.selectLocationList(query);
ExcelUtil util = new ExcelUtil(LocationVO.class);
util.exportExcel(response, list, "存放位置数据");
@@ -63,7 +77,7 @@ public class LocationController extends BaseController
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
- return success(locationService.selectLocationById(id));
+ return success(locationService.selectLocationById(id,true));
}
/**
@@ -72,7 +86,7 @@ public class LocationController extends BaseController
@PreAuthorize("@ss.hasPermi('bst:location:add')")
@Log(title = "存放位置", businessType = BusinessType.INSERT)
@PostMapping
- public AjaxResult add(@RequestBody Location location)
+ public AjaxResult add(@RequestBody @Validated(ValidGroup.Create.class) Location location)
{
return toAjax(locationService.insertLocation(location));
}
@@ -83,8 +97,11 @@ public class LocationController extends BaseController
@PreAuthorize("@ss.hasPermi('bst:location:edit')")
@Log(title = "存放位置", businessType = BusinessType.UPDATE)
@PutMapping
- public AjaxResult edit(@RequestBody Location location)
+ public AjaxResult edit(@RequestBody @Validated(ValidGroup.Update.class) Location location)
{
+ if (!locationValidator.canEdit(location.getId())){
+ return AjaxResult.error("您没有权限修改存放位置信息");
+ }
return toAjax(locationService.updateLocation(location));
}
@@ -94,8 +111,11 @@ public class LocationController extends BaseController
@PreAuthorize("@ss.hasPermi('bst:location:remove')")
@Log(title = "存放位置", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
- public AjaxResult remove(@PathVariable Long[] ids)
+ public AjaxResult remove(@PathVariable List ids)
{
+ if (!locationValidator.canDelete(ids)){
+ return AjaxResult.error("您没有权限修改存放位置信息");
+ }
return toAjax(locationService.deleteLocationByIds(ids));
}
}
diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/bst/StorageController.java b/ruoyi-web/src/main/java/com/ruoyi/web/bst/StorageController.java
index ec7c64f..5363a41 100644
--- a/ruoyi-web/src/main/java/com/ruoyi/web/bst/StorageController.java
+++ b/ruoyi-web/src/main/java/com/ruoyi/web/bst/StorageController.java
@@ -3,18 +3,25 @@ package com.ruoyi.web.bst;
import com.ruoyi.bst.storage.domain.Storage;
import com.ruoyi.bst.storage.domain.StorageQuery;
import com.ruoyi.bst.storage.domain.StorageVO;
+import com.ruoyi.bst.storage.domain.dto.StorageDTO;
+import com.ruoyi.bst.storage.service.StorageConverter;
import com.ruoyi.bst.storage.service.StorageService;
+import com.ruoyi.bst.storage.service.StorageValidator;
+import com.ruoyi.bst.storeStaff.domain.enums.StoreStaffPermission;
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.core.validate.ValidGroup;
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.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -29,6 +36,10 @@ public class StorageController extends BaseController
{
@Autowired
private StorageService storageService;
+ @Autowired
+ private StorageConverter storageConverter;
+ @Autowired
+ private StorageValidator storageValidator;
/**
* 查询存酒列表
@@ -39,6 +50,8 @@ public class StorageController extends BaseController
{
startPage();
startOrderBy();
+ query.setScope(true);
+ query.addStorePermission(StoreStaffPermission.STORAGE_VIEW.getCode());
List list = storageService.selectStorageList(query);
return getDataTable(list);
}
@@ -51,6 +64,7 @@ public class StorageController extends BaseController
@PostMapping("/export")
public void export(HttpServletResponse response, StorageQuery query)
{
+ query.setScope(true);
List list = storageService.selectStorageList(query);
ExcelUtil util = new ExcelUtil(StorageVO.class);
util.exportExcel(response, list, "存酒数据");
@@ -63,7 +77,7 @@ public class StorageController extends BaseController
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
- return success(storageService.selectStorageById(id));
+ return success(storageService.selectStorageById(id,true));
}
/**
@@ -72,8 +86,9 @@ public class StorageController extends BaseController
@PreAuthorize("@ss.hasPermi('bst:storage:add')")
@Log(title = "存酒", businessType = BusinessType.INSERT)
@PostMapping
- public AjaxResult add(@RequestBody Storage storage)
+ public AjaxResult add(@RequestBody @Validated(ValidGroup.Create.class) Storage storage)
{
+ storageConverter.toPoByCreate(storage);
return toAjax(storageService.insertStorage(storage));
}
@@ -83,19 +98,32 @@ public class StorageController extends BaseController
@PreAuthorize("@ss.hasPermi('bst:storage:edit')")
@Log(title = "存酒", businessType = BusinessType.UPDATE)
@PutMapping
- public AjaxResult edit(@RequestBody Storage storage)
+ public AjaxResult edit(@RequestBody @Validated(ValidGroup.Update.class) Storage storage)
{
+ if (!storageValidator.canEdit(storage.getId())){
+ return AjaxResult.error("您无权限修改当前存酒信息");
+ }
return toAjax(storageService.updateStorage(storage));
}
+
/**
- * 删除存酒
+ * 修改存酒
*/
- @PreAuthorize("@ss.hasPermi('bst:storage:remove')")
- @Log(title = "存酒", businessType = BusinessType.DELETE)
- @DeleteMapping("/{ids}")
- public AjaxResult remove(@PathVariable Long[] ids)
+ @PreAuthorize("@ss.hasPermi('bst:storage:getWine')")
+ @Log(title = "取酒", businessType = BusinessType.UPDATE)
+ @PutMapping("/getWine")
+ public AjaxResult getWine(@RequestBody List dtoList)
{
- return toAjax(storageService.deleteStorageByIds(ids));
+ // 权限相关校验
+ List ids = new ArrayList<>();
+ dtoList.forEach(storage->{
+ ids.add(storage.getStorageId());
+ });
+ if (!storageValidator.canEdit(ids)){
+ return AjaxResult.error("您无权限修改当前存酒信息");
+ }
+ return toAjax(storageService.getWine(dtoList));
}
+
}
diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/bst/TeamController.java b/ruoyi-web/src/main/java/com/ruoyi/web/bst/TeamController.java
index 72b258b..712b9c0 100644
--- a/ruoyi-web/src/main/java/com/ruoyi/web/bst/TeamController.java
+++ b/ruoyi-web/src/main/java/com/ruoyi/web/bst/TeamController.java
@@ -126,8 +126,11 @@ public class TeamController extends BaseController
@PreAuthorize("@ss.hasPermi('bst:team:remove')")
@Log(title = "拼桌", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
- public AjaxResult remove(@PathVariable Long[] ids)
+ public AjaxResult remove(@PathVariable List ids)
{
+ if (teamValidator.canDelete(ids)){
+ return AjaxResult.error("您没有权限删除当前拼桌信息");
+ }
return toAjax(teamService.deleteTeamByIds(ids));
}
diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/bst/TeamUserController.java b/ruoyi-web/src/main/java/com/ruoyi/web/bst/TeamUserController.java
index 59a88c8..6183411 100644
--- a/ruoyi-web/src/main/java/com/ruoyi/web/bst/TeamUserController.java
+++ b/ruoyi-web/src/main/java/com/ruoyi/web/bst/TeamUserController.java
@@ -60,6 +60,7 @@ public class TeamUserController extends BaseController
@PostMapping("/export")
public void export(HttpServletResponse response, TeamUserQuery query)
{
+ query.setScope(true);
List list = teamUserService.selectTeamUserList(query);
ExcelUtil util = new ExcelUtil(TeamUserVO.class);
util.exportExcel(response, list, "拼桌用户数据");
@@ -108,6 +109,7 @@ public class TeamUserController extends BaseController
return toAjax(teamUserService.deleteTeamUserByIds(ids));
}
+
@PreAuthorize("@ss.hasPermi('bst:teamUser:kick')")
@Log(title = "踢出用户", businessType = BusinessType.OTHER)
@PutMapping("/kick")