feat:订餐人灵活控制
This commit is contained in:
1 parent
e2d28b5d53
commit
cce873b1c6
4 files changed
+36
-8
No files matched your search
+17
@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.bsd.pjcloud.admin.api.dto.UserInfo;
|
||||
import com.bsd.pjcloud.admin.api.constant.user.UserRelationTypeEnum;
|
||||
import com.bsd.pjcloud.admin.api.entity.SysDept;
|
||||
import com.bsd.pjcloud.admin.api.entity.SysUser;
|
||||
import com.bsd.pjcloud.admin.api.feign.RemoteDeptService;
|
||||
@@ -107,6 +108,7 @@ import com.bsd.pjcloud.wallet.api.dto.act.ActComCancelDto;
|
||||
import com.bsd.pjcloud.wallet.api.entity.WalletCodeUseEntity;
|
||||
import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity;
|
||||
import com.bsd.pjcloud.wallet.api.entity.WalletTransactionEntity;
|
||||
import com.bsd.pjcloud.wallet.api.entity.mch.MchManageEntity;
|
||||
import com.bsd.pjcloud.wallet.api.feign.*;
|
||||
import com.bsd.pjcloud.wallet.api.utils.WalletDataUtil;
|
||||
import com.bsd.pjcloud.wallet.api.vo.MchManageVo;
|
||||
@@ -939,6 +941,7 @@ public class HardOrderServiceImpl extends ServiceImpl<HardOrderMapper, HardOrder
|
||||
if (!Objects.equals(merchant.getTypes(), MerchantTypeEnum.CANTEEN.getType())) {
|
||||
throw new RuntimeException("购物车商户不是食堂商户");
|
||||
}
|
||||
validateMerchantReserveDinerPermissions(payerUserId, dinerUserIds, merchant);
|
||||
WalletManageEntity wallet = Optional.ofNullable(remoteWalletService.getWallet(payerUserId, WalletTypeEnum.EAT)).map(R::getData).orElseThrow(() -> new RuntimeException("用户钱包不存在"));
|
||||
if (!Objects.equals(wallet.getUserId(), payerUserId)) {
|
||||
throw new RuntimeException("钱包不属于当前付款人");
|
||||
@@ -1051,6 +1054,20 @@ public class HardOrderServiceImpl extends ServiceImpl<HardOrderMapper, HardOrder
|
||||
return new ArrayList<>(distinctIds);
|
||||
}
|
||||
|
||||
/**
|
||||
* 商户未配置监护关系时只能为付款人本人订餐,服务端必须再次校验以防绕过 App 限制。
|
||||
*/
|
||||
private void validateMerchantReserveDinerPermissions(Long payerUserId, List<Long> dinerUserIds, MchManageVo merchant) {
|
||||
boolean containsProxyDiner = dinerUserIds.stream().anyMatch(id -> !Objects.equals(id, payerUserId));
|
||||
if (!containsProxyDiner) {
|
||||
return;
|
||||
}
|
||||
MchManageEntity.TableReservationConf conf = merchant.getTableReservationConf();
|
||||
if (conf == null || ObjectUtil.isEmpty(conf.getUserRelationTypeIdList()) || !conf.getUserRelationTypeIdList().contains(UserRelationTypeEnum.GUARDIAN_WARD.getRelationCode())) {
|
||||
throw new RuntimeException("当前商户未开启监护关系代订餐");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 多人复制购物车前先拒绝缺少商品、数量或金额的异常明细,避免在库存汇总阶段出现半途失败。
|
||||
*/
|
||||
|
||||
+2
-2
@@ -242,9 +242,9 @@ public class MchManageEntity extends Model<MchManageEntity> {
|
||||
private Boolean singleProductOnlyInCart = false;
|
||||
|
||||
/**
|
||||
* 为什么的`用户关系类型`代订餐(一般是监护人为被监护人代订餐)
|
||||
* 允许代订餐的用户关系编码,对应 sys_user_relation_type 字典和 UserRelationTypeEnum。
|
||||
*/
|
||||
private List<Long> userRelationTypeIdList;
|
||||
private List<String> userRelationTypeIdList;
|
||||
}
|
||||
|
||||
@Data
|
||||
|
||||
+1
-1
@@ -76,4 +76,4 @@ public interface MchManageService extends IService<MchManageEntity> {
|
||||
* 判断用户是否能查看到所有食堂
|
||||
*/
|
||||
boolean getIsConsumeUser(Long id);
|
||||
}
|
||||
}
|
||||
+16
-5
@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.bsd.pjcloud.admin.api.dto.UserInfo;
|
||||
import com.bsd.pjcloud.admin.api.constant.user.UserRelationTypeEnum;
|
||||
import com.bsd.pjcloud.admin.api.entity.SysDept;
|
||||
import com.bsd.pjcloud.admin.api.feign.RemoteDeptService;
|
||||
import com.bsd.pjcloud.admin.api.feign.RemoteFileService;
|
||||
@@ -66,6 +67,7 @@ import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@@ -189,13 +191,22 @@ public class MchManageServiceImpl extends ServiceImpl<MchManageMapper, MchManage
|
||||
String reserveMode = conf.getReserveMode();
|
||||
if (reserveMode == null || reserveMode.trim().isEmpty()) {
|
||||
conf.setReserveMode("TIME_WINDOW");
|
||||
return;
|
||||
} else {
|
||||
reserveMode = reserveMode.trim();
|
||||
if (!"TIME_WINDOW".equals(reserveMode) && !"WEEKLY_CYCLE".equals(reserveMode)) {
|
||||
throw new RuntimeException("预约时间模式无效");
|
||||
}
|
||||
conf.setReserveMode(reserveMode);
|
||||
}
|
||||
reserveMode = reserveMode.trim();
|
||||
if (!"TIME_WINDOW".equals(reserveMode) && !"WEEKLY_CYCLE".equals(reserveMode)) {
|
||||
throw new RuntimeException("预约时间模式无效");
|
||||
// 配置保存枚举业务编码;历史数据库ID和无效值在再次保存时自动移除。
|
||||
if (ObjectUtil.isNotEmpty(conf.getUserRelationTypeIdList())) {
|
||||
conf.setUserRelationTypeIdList(conf.getUserRelationTypeIdList().stream()
|
||||
.filter(Objects::nonNull)
|
||||
.map(String::trim)
|
||||
.filter(code -> UserRelationTypeEnum.valueOfByType(code) != null)
|
||||
.distinct()
|
||||
.toList());
|
||||
}
|
||||
conf.setReserveMode(reserveMode);
|
||||
}
|
||||
|
||||
@CacheEvict(
|
||||
|
||||
Reference in new issue
Block a user