From cce873b1c60dabb1dbf2c52598b1b46d5d49d64f Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Wed, 22 Jul 2026 19:15:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E8=AE=A2=E9=A4=90=E4=BA=BA=E7=81=B5?= =?UTF-8?q?=E6=B4=BB=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/order/HardOrderServiceImpl.java | 17 +++++++++++++++ .../api/entity/mch/MchManageEntity.java | 4 ++-- .../wallet/service/MchManageService.java | 2 +- .../impl/mch/MchManageServiceImpl.java | 21 ++++++++++++++----- 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java index c38445662..7d7157973 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java @@ -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 new RuntimeException("用户钱包不存在")); if (!Objects.equals(wallet.getUserId(), payerUserId)) { throw new RuntimeException("钱包不属于当前付款人"); @@ -1051,6 +1054,20 @@ public class HardOrderServiceImpl extends ServiceImpl(distinctIds); } + /** + * 商户未配置监护关系时只能为付款人本人订餐,服务端必须再次校验以防绕过 App 限制。 + */ + private void validateMerchantReserveDinerPermissions(Long payerUserId, List 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("当前商户未开启监护关系代订餐"); + } + } + /** * 多人复制购物车前先拒绝缺少商品、数量或金额的异常明细,避免在库存汇总阶段出现半途失败。 */ diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/mch/MchManageEntity.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/mch/MchManageEntity.java index f12be2c1a..e7ffdcebb 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/mch/MchManageEntity.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/mch/MchManageEntity.java @@ -242,9 +242,9 @@ public class MchManageEntity extends Model { private Boolean singleProductOnlyInCart = false; /** - * 为什么的`用户关系类型`代订餐(一般是监护人为被监护人代订餐) + * 允许代订餐的用户关系编码,对应 sys_user_relation_type 字典和 UserRelationTypeEnum。 */ - private List userRelationTypeIdList; + private List userRelationTypeIdList; } @Data diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/MchManageService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/MchManageService.java index e43b6e999..72add9efe 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/MchManageService.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/MchManageService.java @@ -76,4 +76,4 @@ public interface MchManageService extends IService { * 判断用户是否能查看到所有食堂 */ boolean getIsConsumeUser(Long id); -} \ No newline at end of file +} diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchManageServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchManageServiceImpl.java index 5077a40c8..f69ba59e8 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchManageServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/mch/MchManageServiceImpl.java @@ -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 UserRelationTypeEnum.valueOfByType(code) != null) + .distinct() + .toList()); } - conf.setReserveMode(reserveMode); } @CacheEvict(