From 28d1b11176dbddfc6bb966f2b1d8776b946dd9be Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期一, 09 十二月 2024 17:34:12 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopClient.java                  |    7 +
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TechnicianSubscribeService.java          |    2 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WithdrawalRequestsController.java |    1 
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/VipSetting.java                       |    4 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/ShopService.java                         |    1 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TechnicianSubscribeController.java    |    2 
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OrderClient.java                 |    2 
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/ShopClientFallbackFactory.java       |    7 +
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/VipCenterServiceImpl.java       |  278 ++++++++++++++++++++++++++++++++++++++-
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java                   |    8 +
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsEvaluateController.java          |    6 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/factory/RemoteOrderGoodsFallbackFactory.java     |    5 
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/GoodsEvaluate.java                    |    8 +
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java                  |   12 +
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsEvaluateServiceImpl.java       |    2 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TechnicianSubscribeServiceImpl.java |   18 +-
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/VipCenterController.java          |   23 ---
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TechnicianSubscribe.java              |    5 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsController.java                  |    3 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/VipCenterService.java                |    3 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/feignClient/RemoteOrderGoodsClient.java          |    6 
 21 files changed, 353 insertions(+), 50 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/factory/RemoteOrderGoodsFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/factory/RemoteOrderGoodsFallbackFactory.java
index f719fcb..00e5cd1 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/factory/RemoteOrderGoodsFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/factory/RemoteOrderGoodsFallbackFactory.java
@@ -35,6 +35,11 @@
             public R<Void> updateOrderStatus(Order order) {
                 return R.fail("更新订单状态失败");
             }
+
+            @Override
+            public R<Void> subscribe(Long id, Integer technicianId) {
+                return R.fail("预约失败");
+            }
         };
 
     }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/feignClient/RemoteOrderGoodsClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/feignClient/RemoteOrderGoodsClient.java
index 8a341d2..5aadf65 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/feignClient/RemoteOrderGoodsClient.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/feignClient/RemoteOrderGoodsClient.java
@@ -40,4 +40,10 @@
      */
     @PostMapping("/order/updateOrderStatus")
     public R<Void> updateOrderStatus(@RequestBody Order order);
+
+    /**
+     * 预约技师
+     */
+    @PostMapping("/order/subscribe")
+    public R<Void> subscribe(@RequestParam(value = "id" , required = false) Long id ,@RequestParam(value = "technicianId", required = false) Integer technicianId);
 }
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/GoodsEvaluate.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/GoodsEvaluate.java
index 2de0d6f..4aeac0a 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/GoodsEvaluate.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/GoodsEvaluate.java
@@ -79,5 +79,13 @@
     @TableField(exist = false)
     private String userName;
 
+    @ApiModelProperty(value = "商品名字")
+    @TableField(exist = false)
+    private String goodsName;
+
+    @ApiModelProperty(value = "商品图片")
+    @TableField(exist = false)
+    private String goodsImg;
+
 
 }
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TechnicianSubscribe.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TechnicianSubscribe.java
index 2da2886..f926ef7 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TechnicianSubscribe.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TechnicianSubscribe.java
@@ -70,5 +70,10 @@
     private LocalDateTime createTime;
 
 
+    @ApiModelProperty(value = "订单id")
+    @TableField(exist = false)
+    private Long orderId;
+
+
 
 }
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/VipSetting.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/VipSetting.java
index efcb5a7..688cbd4 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/VipSetting.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/VipSetting.java
@@ -131,5 +131,9 @@
     @TableField("keep_shop_point")
     private Integer keepShopPoint;
 
+    @ApiModelProperty(value = "会员等级是否必须达到代理: 0-否 1-是")
+    @TableField("vip_level_up_proxy_role")
+    private Integer vipLevelUpProxyRole;
+
 
 }
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/ShopClientFallbackFactory.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/ShopClientFallbackFactory.java
index 933c976..3a33ec3 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/ShopClientFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/ShopClientFallbackFactory.java
@@ -6,6 +6,8 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.cloud.openfeign.FallbackFactory;
 
+import java.util.List;
+
 @Slf4j
 public class ShopClientFallbackFactory implements FallbackFactory<ShopClient> {
     @Override
@@ -20,6 +22,11 @@
             public R<Shop> getShopByPhone(String phone) {
                 return R.fail("根据店铺管理员电话获取门店数据失败:" + cause.getMessage());
             }
+
+            @Override
+            public R<List<Shop>> getShopByUserIds(List<Long> userIds) {
+                return R.fail("根据用户id集合获取门店数据失败");
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OrderClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OrderClient.java
index d36d01d..bc7cd91 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OrderClient.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/OrderClient.java
@@ -17,6 +17,4 @@
 public interface OrderClient {
     @PostMapping(value = "/management/give/vip")
     public R<List<Long>> getOrderIdsByTechId(@RequestParam("id") Integer id);
-
-
 }
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopClient.java
index 2928637..bbc7986 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopClient.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/ShopClient.java
@@ -1,12 +1,16 @@
 package com.ruoyi.other.api.feignClient;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ruoyi.common.core.constant.ServiceNameConstants;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.other.api.domain.Shop;
 import com.ruoyi.other.api.factory.ShopClientFallbackFactory;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
 
 /**
  * @author zhibing.pu
@@ -32,4 +36,7 @@
 	 */
 	@PostMapping("/shop/getShopByPhone")
 	R<Shop> getShopByPhone(@RequestParam("phone") String phone);
+
+	@PostMapping("/getShopByUserIds")
+	public R<List<Shop>> getShopByUserIds(@RequestBody List<Long> userIds);
 }
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/VipCenterController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/VipCenterController.java
index 6f20e70..aeb40c0 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/VipCenterController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/VipCenterController.java
@@ -1,7 +1,6 @@
 package com.ruoyi.account.controller;
 
 import com.alibaba.fastjson2.JSONObject;
-import com.ruoyi.account.service.AppUserService;
 import com.ruoyi.account.service.VipCenterService;
 import com.ruoyi.account.service.VipSettingService;
 import com.ruoyi.account.vo.vip.Level;
@@ -13,8 +12,6 @@
 import com.ruoyi.other.api.feignClient.BaseSettingClient;
 import com.ruoyi.other.api.feignClient.GoodsVipClient;
 import com.ruoyi.other.api.feignClient.RemoteVipSettingClient;
-import com.ruoyi.other.api.feignClient.VipGoodClient;
-import com.ruoyi.system.api.model.LoginUser;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -46,10 +43,6 @@
     private VipSettingService vipSettingService;
     @Resource
     private TokenService tokenService;
-    @Resource
-    private VipGoodClient vipGoodClient;
-    @Resource
-    private AppUserService appUserService;
     @Resource
     private VipCenterService vipCenterService;
 
@@ -130,22 +123,8 @@
     @GetMapping("/check")
     @ApiOperation(value = "会员申请检查", tags = {"会员中心-小程序"})
     public R<Boolean> check(@ApiParam("4:准代理,5:代理,6:总代理,7:合伙人") @RequestParam Integer type) {
-        LoginUser loginUser = tokenService.getLoginUser();
-        Long userid = loginUser.getUserid();
-        if (type == 4){
-            return R.ok(vipCenterService.checkReadyToBeProxy(userid, type));
-        }else if (type == 5){
-            return R.ok(vipCenterService.checkReadyToBeAgent(userid));
-        }else if (type == 6){
-            return R.ok(vipCenterService.checkReadyToBeTotalAgent(userid));
-        }else if (type == 7){
-            return R.ok(vipCenterService.checkReadyToBePartner(userid));
-        }else {
-            return R.fail("参数错误");
-        }
+        return R.ok(vipCenterService.check(type));
     }
-
-
 
 
     private boolean checkSuccess(R<?> r) {
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WithdrawalRequestsController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WithdrawalRequestsController.java
index 10b48d1..f64a14d 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WithdrawalRequestsController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WithdrawalRequestsController.java
@@ -39,5 +39,6 @@
         return AjaxResult.success();
     }
 
+
 }
 
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/VipCenterService.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/VipCenterService.java
index 0bfd5bf..d7b6228 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/VipCenterService.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/VipCenterService.java
@@ -21,4 +21,7 @@
      * 校验合伙人的申请条件
      */
     Boolean checkReadyToBePartner(Long userId);
+
+
+    Boolean check(Integer type);
 }
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/VipCenterServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/VipCenterServiceImpl.java
index 68bae5a..2ec3a0c 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/VipCenterServiceImpl.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/VipCenterServiceImpl.java
@@ -8,16 +8,23 @@
 import com.ruoyi.account.service.VipCenterService;
 import com.ruoyi.account.service.VipSettingService;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.order.feignClient.RemoteOrderGoodsClient;
 import com.ruoyi.order.model.Order;
 import com.ruoyi.other.api.domain.Goods;
+import com.ruoyi.other.api.domain.Shop;
 import com.ruoyi.other.api.domain.VipGood;
 import com.ruoyi.other.api.domain.VipSetting;
+import com.ruoyi.other.api.feignClient.ShopClient;
 import com.ruoyi.other.api.feignClient.VipGoodClient;
+import com.ruoyi.system.api.model.LoginUser;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 @Service
@@ -30,6 +37,11 @@
     private VipGoodClient vipGoodClient;
     @Resource
     private VipSettingService vipSettingService;
+    @Resource
+    private ShopClient shopClient;
+    @Resource
+    private TokenService tokenService;
+
 
     @Override
     public Boolean checkReadyToBeProxy(Long userId,Integer vipId) {
@@ -40,34 +52,276 @@
         Integer sharePoint = appUser.getSharePoint();
         // 准代理会员设置
         VipSetting vipSetting = vipSettingService.getVipSettingById(4);
-        // 消费积分阈值
-        Integer vipLevelUpShop = vipSetting.getVipLevelUpShop();
-        // 返佣积分阈值
-        Integer vipLevelUpShare = vipSetting.getVipLevelUpShare();
-        if (shopPoint >=vipLevelUpShop && sharePoint >= vipLevelUpShare){
-            return true;
+        // 获取通过消费积分达成会员等级的开关
+        Integer vipLevelUpShopRole = vipSetting.getVipLevelUpShopRole();
+        if (vipLevelUpShopRole == 1){
+            // 消费积分阈值
+            Integer vipLevelUpShop = vipSetting.getVipLevelUpShop();
+            // 返佣积分阈值
+            Integer vipLevelUpShare = vipSetting.getVipLevelUpShare();
+            // 判断是否满足消费积分和返佣积分
+            if (shopPoint >=vipLevelUpShop && sharePoint >= vipLevelUpShare){
+                return true;
+            }
         }
-        // 直推钻石用户数阈值
-        Integer vipDirectNum = vipSetting.getVipDirectNum();
-        // 获取用户直推钻石用户数量
-        long userDiamondsCount = appUserService.count(new LambdaQueryWrapper<AppUser>()
-                .eq(AppUser::getInviteUserId, userId)
-                .eq(AppUser::getVipId, 3));
+
+        Integer vipLevelUpNumRole = vipSetting.getVipLevelUpNumRole();
+        if (vipLevelUpNumRole == 1){
+            // 直推钻石用户数阈值
+            Integer vipDirectNum = vipSetting.getVipDirectNum();
+            // 获取用户直推钻石用户数量
+            long userDiamondsCount = appUserService.count(new LambdaQueryWrapper<AppUser>()
+                    .eq(AppUser::getInviteUserId, userId)
+                    .eq(AppUser::getVipId, 3));
+            // 判断是否满足直推钻石用户数量
+            if (userDiamondsCount >= vipDirectNum){
+                return true;
+            }
+        }
+        // 获取指定购买商品
+        R<List<VipGood>> vipGoodsByVipId = vipGoodClient.getVipGoodsByVipId(4);
+        if (R.isSuccess(vipGoodsByVipId)){
+            List<VipGood> vipGoods = vipGoodsByVipId.getData();
+            if (CollectionUtil.isNotEmpty(vipGoods)){
+                for (VipGood vipGood : vipGoods) {
+                    String goodJson = vipGood.getGoodJson();
+                    Goods goods = JSONObject.parseObject(goodJson, Goods.class);
+                    R<List<Order>> orderListByUserIdAndGoodsId = remoteOrderGoodsClient.getOrderListByUserIdAndGoodsId(userId, goods.getId());
+                    if (R.isSuccess(orderListByUserIdAndGoodsId)){
+                        List<Order> orderList = orderListByUserIdAndGoodsId.getData();
+                        if (CollectionUtil.isEmpty(orderList)){
+                            return false;
+                        }
+                    }
+                }
+                return true;
+            }
+        }
+
         return false;
     }
 
     @Override
     public Boolean checkReadyToBeAgent(Long userId) {
+        AppUser appUser = appUserService.getById(userId);
+        // 消费积分
+        Integer shopPoint = appUser.getShopPoint();
+        // 返佣积分
+        Integer sharePoint = appUser.getSharePoint();
+        // 代理会员设置
+        VipSetting vipSetting = vipSettingService.getVipSettingById(5);
+        // 获取通过消费积分达成会员等级的开关
+        Integer vipLevelUpShopRole = vipSetting.getVipLevelUpShopRole();
+        if (vipLevelUpShopRole == 1){
+            // 消费积分阈值
+            Integer vipLevelUpShop = vipSetting.getVipLevelUpShop();
+            // 返佣积分阈值
+            Integer vipLevelUpShare = vipSetting.getVipLevelUpShare();
+            // 判断是否满足消费积分和返佣积分
+            if (shopPoint >=vipLevelUpShop && sharePoint >= vipLevelUpShare){
+                return true;
+            }
+        }
+
+        Integer vipLevelUpNumRole = vipSetting.getVipLevelUpNumRole();
+        if (vipLevelUpNumRole == 1){
+            // 直推钻石用户数阈值
+            Integer vipDirectNum = vipSetting.getVipDirectNum();
+            // 获取用户直推钻石用户数量
+            long userDiamondsCount = appUserService.count(new LambdaQueryWrapper<AppUser>()
+                    .eq(AppUser::getInviteUserId, userId)
+                    .eq(AppUser::getVipId, 3));
+            // 判断是否满足直推钻石用户数量
+            if (userDiamondsCount >= vipDirectNum){
+                return true;
+            }
+        }
+
+        R<List<VipGood>> vipGoodsByVipId = vipGoodClient.getVipGoodsByVipId(5);
+        if (R.isSuccess(vipGoodsByVipId)){
+            List<VipGood> vipGoods = vipGoodsByVipId.getData();
+            if (CollectionUtil.isNotEmpty(vipGoods)){
+                for (VipGood vipGood : vipGoods) {
+                    String goodJson = vipGood.getGoodJson();
+                    Goods goods = JSONObject.parseObject(goodJson, Goods.class);
+                    R<List<Order>> orderListByUserIdAndGoodsId = remoteOrderGoodsClient.getOrderListByUserIdAndGoodsId(userId, goods.getId());
+                    if (R.isSuccess(orderListByUserIdAndGoodsId)){
+                        List<Order> orderList = orderListByUserIdAndGoodsId.getData();
+                        if (CollectionUtil.isEmpty(orderList)){
+                            return false;
+                        }
+                    }
+                }
+                return true;
+            }
+        }
+
         return false;
     }
 
     @Override
     public Boolean checkReadyToBeTotalAgent(Long userId) {
+        AppUser appUser = appUserService.getById(userId);
+        // 获取总代会员设置
+        VipSetting vipSetting = vipSettingService.getVipSettingById(6);
+        // 获取会员等级是否必须达到代理
+        Integer vipLevelUpProxyRole = vipSetting.getVipLevelUpProxyRole();
+        if (vipLevelUpProxyRole == 1 && appUser.getVipId() == 5){
+            return true;
+        }
+
+        // 消费积分
+        Integer shopPoint = appUser.getShopPoint();
+        // 返佣积分
+        Integer sharePoint = appUser.getSharePoint();
+        // 获取通过消费积分达成会员等级的开关
+        Integer vipLevelUpShopRole = vipSetting.getVipLevelUpShopRole();
+        if (vipLevelUpShopRole == 1){
+            // 消费积分阈值
+            Integer vipLevelUpShop = vipSetting.getVipLevelUpShop();
+            // 返佣积分阈值
+            Integer vipLevelUpShare = vipSetting.getVipLevelUpShare();
+            // 判断是否满足消费积分和返佣积分
+            if (shopPoint >=vipLevelUpShop && sharePoint >= vipLevelUpShare){
+                return true;
+            }
+        }
+
+        Integer vipLevelUpNumRole = vipSetting.getVipLevelUpNumRole();
+        if (vipLevelUpNumRole == 1){
+            // 直推代理用户数阈值
+            Integer vipDirectNum = vipSetting.getVipDirectNum();
+            // 准代理用户数阈值
+            Integer vipDirectVipNum = vipSetting.getVipDirectVipNum();
+            // 获取用户直推代理用户数量
+            List<AppUser> userAgentList = appUserService.list(new LambdaQueryWrapper<AppUser>()
+                    .eq(AppUser::getInviteUserId, userId)
+                    .eq(AppUser::getVipId, 5));
+
+            // 代理下的准代理数量
+            List<Long> userQuasiAgent = userAgentList.stream().map(AppUser::getId).collect(Collectors.toList());
+            long userQuasiAgentCount = appUserService.count(new LambdaQueryWrapper<AppUser>()
+                    .in(AppUser::getInviteUserId, userQuasiAgent)
+                    .eq(AppUser::getVipId, 4));
+
+            // 判断是否满足直推代理用户数量和准代理数量
+            if (userAgentList.size() >= vipDirectNum && userQuasiAgentCount >= vipDirectVipNum){
+                return true;
+            }
+        }
+        // 获取指定购买商品
+        R<List<VipGood>> vipGoodsByVipId = vipGoodClient.getVipGoodsByVipId(5);
+        if (R.isSuccess(vipGoodsByVipId)){
+            List<VipGood> vipGoods = vipGoodsByVipId.getData();
+            if (CollectionUtil.isNotEmpty(vipGoods)){
+                for (VipGood vipGood : vipGoods) {
+                    String goodJson = vipGood.getGoodJson();
+                    Goods goods = JSONObject.parseObject(goodJson, Goods.class);
+                    R<List<Order>> orderListByUserIdAndGoodsId = remoteOrderGoodsClient.getOrderListByUserIdAndGoodsId(userId, goods.getId());
+                    if (R.isSuccess(orderListByUserIdAndGoodsId)){
+                        List<Order> orderList = orderListByUserIdAndGoodsId.getData();
+                        if (CollectionUtil.isEmpty(orderList)){
+                            return false;
+                        }
+                    }
+                }
+                return true;
+            }
+        }
+
         return false;
     }
 
     @Override
     public Boolean checkReadyToBePartner(Long userId) {
+        AppUser appUser = appUserService.getById(userId);
+        // 消费积分
+        Integer shopPoint = appUser.getShopPoint();
+        // 返佣积分
+        Integer sharePoint = appUser.getSharePoint();
+        // 合伙人会员设置
+        VipSetting vipSetting = vipSettingService.getVipSettingById(7);
+        // 获取通过消费积分达成会员等级的开关
+        Integer vipLevelUpShopRole = vipSetting.getVipLevelUpShopRole();
+        if (vipLevelUpShopRole == 1){
+            // 消费积分阈值
+            Integer vipLevelUpShop = vipSetting.getVipLevelUpShop();
+            // 返佣积分阈值
+            Integer vipLevelUpShare = vipSetting.getVipLevelUpShare();
+            // 判断是否满足消费积分和返佣积分
+            if (shopPoint >=vipLevelUpShop && sharePoint >= vipLevelUpShare){
+                return true;
+            }
+
+            Integer vipLevelUpNumRole = vipSetting.getVipLevelUpNumRole();
+            if (vipLevelUpNumRole == 1){
+                // 直推代理用户数阈值
+                Integer vipDirectNum = vipSetting.getVipDirectNum();
+                // 准代理用户数阈值
+                Integer vipDirectVipNum = vipSetting.getVipDirectVipNum();
+                // 总代用户数阈值
+                Integer vipTeamVipNum = vipSetting.getVipTeamVipNum();
+                // 获取开店数量阈值
+                Integer vipOpenShopNum = vipSetting.getVipOpenShopNum();
+
+                // 获取直推用户有超过指定门店数量的用户
+                List<Long> userShopList = appUserService.list(new LambdaQueryWrapper<AppUser>()
+                        .eq(AppUser::getInviteUserId, userId))
+                        .stream().map(AppUser::getId).collect(Collectors.toList());
+                if (CollectionUtil.isNotEmpty(userShopList)){
+                    R<List<Shop>> r = shopClient.getShopByUserIds(userShopList);
+                    List<Shop> shopList = r.getData();
+                    if (CollectionUtil.isNotEmpty(shopList)){
+                        Map<Long, List<Shop>> shopUserMap = shopList.stream().collect(Collectors.groupingBy(Shop::getAppUserId));
+
+                        // 查找 list 长度大于 3 的 key
+                        Set<Long> shopUserIdSet = shopUserMap.entrySet().stream()
+                                .filter(entry -> entry.getValue().size() >= vipOpenShopNum)
+                                .map(Map.Entry::getKey)
+                                .collect(Collectors.toSet());
+
+                        // 获取用户直推总代理数量
+                        List<AppUser> userTotalAgentList = appUserService.list(new LambdaQueryWrapper<AppUser>()
+                                .in(AppUser::getInviteUserId, shopUserIdSet)
+                                .eq(AppUser::getVipId, 6));
+
+                        // 获取用户直推代理用户数量
+                        List<AppUser> userAgentList = appUserService.list(new LambdaQueryWrapper<AppUser>()
+                                .in(AppUser::getInviteUserId, shopUserIdSet)
+                                .eq(AppUser::getVipId, 5));
+
+                        // 代理下的准代理数量
+                        List<Long> userQuasiAgent = userAgentList.stream().map(AppUser::getId).collect(Collectors.toList());
+                        long userQuasiAgentCount = appUserService.count(new LambdaQueryWrapper<AppUser>()
+                                .in(AppUser::getInviteUserId, userQuasiAgent)
+                                .eq(AppUser::getVipId, 4));
+
+                        // 判断是否满足直推代理用户数量和准代理数量
+                        return userTotalAgentList.size() >= vipTeamVipNum && userAgentList.size() >= vipDirectNum &&
+                                userQuasiAgentCount >= vipDirectVipNum;
+
+                    }
+
+                }
+            }
+        }
         return false;
     }
+
+    @Override
+    public Boolean check(Integer type) {
+        LoginUser loginUser = tokenService.getLoginUser();
+        Long userid = loginUser.getUserid();
+        if (type == 4){
+            return checkReadyToBeProxy(userid, type);
+        }else if (type == 5){
+            return checkReadyToBeAgent(userid);
+        }else if (type == 6){
+            return checkReadyToBeTotalAgent(userid);
+        }else if (type == 7){
+            return checkReadyToBePartner(userid);
+        }else {
+            throw new ServiceException("参数错误");
+        }
+    }
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java
index f295ec5..f896d40 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java
@@ -166,6 +166,18 @@
     }
 
 
+    /**
+     * 预约技师
+     */
+    @PostMapping("/subscribe")
+    public R<Void> subscribe(@RequestParam(value = "id", required = false) Long id ,@RequestParam(value = "technicianId", required = false) Integer technicianId){
+        Order order = orderService.getById(id);
+        order.setTechnicianId(technicianId);
+        orderService.updateById(order);
+        return R.ok();
+    }
+
+
 
 }
 
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsController.java
index 1aa28d5..f5d19af 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsController.java
@@ -31,6 +31,9 @@
     @Resource
     private GoodsService goodsService;
 
+
+
+
     /**
      * 商品列表
      */
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsEvaluateController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsEvaluateController.java
index a7e2962..273c58b 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsEvaluateController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsEvaluateController.java
@@ -7,6 +7,7 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.other.api.domain.GoodsEvaluate;
 import com.ruoyi.other.service.GoodsEvaluateService;
+import com.ruoyi.other.service.GoodsService;
 import com.ruoyi.other.vo.GoodsEvaluateVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -32,6 +33,8 @@
     private GoodsEvaluateService goodsEvaluateService;
     @Resource
     private AppUserClient appUserClient;
+    @Resource
+    private GoodsService goodsService;
 
     @GetMapping("/goodsList")
     @ApiOperation(value = "获取商品评价", tags = {"小程序-获取商品评价"})
@@ -64,6 +67,9 @@
         List<GoodsEvaluate> list = goodsEvaluateService.list(new LambdaQueryWrapper<GoodsEvaluate>()
                 .eq(GoodsEvaluate::getStatus, 2)
                 .eq(GoodsEvaluate::getOrderId, orderId));
+        for (GoodsEvaluate goodsEvaluate : list) {
+
+        }
         return R.ok(list);
     }
 
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java
index 41c12e5..f846e47 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java
@@ -54,6 +54,7 @@
     private TokenService tokenService;
 
 
+
     @PostMapping("/getDetailById")
     public R<Shop> getDetailById(@RequestParam("id") Long id){
         Shop byId = shopService.getById(id);
@@ -152,5 +153,12 @@
         Shop one = shopService.getOne(new LambdaQueryWrapper<Shop>().eq(Shop::getPhone, phone).eq(Shop::getDelFlag, 0).eq(Shop::getStatus, 1));
         return R.ok(one);
     }
+
+    @PostMapping("/getShopByUserIds")
+    public R<List<Shop>> getShopByUserIds(@RequestBody List<Long> userIds){
+        List<Shop> list = shopService.list(new LambdaQueryWrapper<Shop>().in(Shop::getAppUserId, userIds));
+        return R.ok(list);
+    }
+
 }
 
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TechnicianSubscribeController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TechnicianSubscribeController.java
index fabe13d..44975f1 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TechnicianSubscribeController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TechnicianSubscribeController.java
@@ -52,7 +52,7 @@
     @PostMapping("/subscribe")
     @ApiOperation(value = "预约技师", notes = "预约技师", tags = {"小程序-个人中心-门店管理-预约列表-预约技师"})
     public R<Void> subscribe(@RequestBody TechnicianSubscribe technicianSubscribe) {
-        technicianSubscribeService.subscribe(technicianSubscribe, technicianSubscribe.getTechnicianId());
+        technicianSubscribeService.subscribe(technicianSubscribe);
         return R.ok();
     }
 
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/ShopService.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/ShopService.java
index 7784358..4500e50 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/ShopService.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/ShopService.java
@@ -21,4 +21,5 @@
     List<NearbyShopVO> nearbyShopList(BigDecimal longitude, BigDecimal latitude);
 
     ShopDetailVO getShopDetail(Integer shopId, BigDecimal longitude, BigDecimal latitude);
+
 }
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TechnicianSubscribeService.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TechnicianSubscribeService.java
index 73e8cfc..af7e292 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TechnicianSubscribeService.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TechnicianSubscribeService.java
@@ -25,5 +25,5 @@
 
     IPage<TechnicianSubscribeVO> getTechnicianSubscribeByUser(Page<TechnicianSubscribe> page, Long userId, Integer status);
 
-    void subscribe(TechnicianSubscribe technicianSubscribe, Long technicianId);
+    void subscribe(TechnicianSubscribe technicianSubscribe);
 }
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsEvaluateServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsEvaluateServiceImpl.java
index 943bb2c..d7f8633 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsEvaluateServiceImpl.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsEvaluateServiceImpl.java
@@ -35,7 +35,7 @@
         for (GoodsEvaluate goodsEvaluate : evaluates) {
             goodsEvaluate.setStatus(2);
         }
-        this.saveBatch(evaluates);
+        this.saveOrUpdateBatch(evaluates);
         if (CollectionUtil.isNotEmpty(evaluates)){
             Order order = new Order();
             order.setId(goodsEvaluateVO.getEvaluates().get(0).getOrderId());
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TechnicianSubscribeServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TechnicianSubscribeServiceImpl.java
index 4acbbe7..a18d4f0 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TechnicianSubscribeServiceImpl.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TechnicianSubscribeServiceImpl.java
@@ -4,9 +4,9 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.order.feignClient.RemoteOrderGoodsClient;
 import com.ruoyi.other.api.domain.TechnicianSubscribe;
 import com.ruoyi.other.enums.TechnicianStatus;
-import com.ruoyi.other.mapper.TechnicianMapper;
 import com.ruoyi.other.mapper.TechnicianSubscribeMapper;
 import com.ruoyi.other.service.TechnicianSubscribeService;
 import com.ruoyi.other.vo.TechnicianSubscribeVO;
@@ -29,7 +29,7 @@
     @Resource
     private TechnicianSubscribeMapper technicianSubscribeMapper;
     @Resource
-    private TechnicianMapper technicianMapper;
+    private RemoteOrderGoodsClient orderGoodsClient;
 
     @Override
     public List<TechnicianSubscribeVO> getTechnicianSubscribeByUserAndShop(Long userId, Long shopId) {
@@ -41,15 +41,7 @@
     }
 
     @Override
-//    @DistributedLock(lockNamePre = "#technician_subscribe_lock", lockNamePost = "#technicianId")
-    public void subscribe(TechnicianSubscribe subscribe, Long technicianId) {
-//        Long count = technicianSubscribeMapper.selectCount(new LambdaQueryWrapper<TechnicianSubscribe>()
-//                .eq(TechnicianSubscribe::getTechnicianId, technicianId)
-//                .eq(TechnicianSubscribe::getSubscribeTime, subscribe.getSubscribeTime())
-//                .eq(TechnicianSubscribe::getStatus, TechnicianStatus.UNSUBSCRIBE.getCode()));
-//        if (count > 0) {
-//            throw new ServiceException("当前时间段已被预约", TechnicianErrorCode.TECHNICIAN_ALREADY_SUBSCRIBED.getCode());
-//        }
+    public void subscribe(TechnicianSubscribe subscribe) {
         // 创建技师预约单
         Long userId = SecurityUtils.getUserId();
         subscribe.setAppUserId(userId);
@@ -58,5 +50,9 @@
         subscribe.setCreateTime(LocalDateTime.now());
         technicianSubscribeMapper.insert(subscribe);
 
+        if (subscribe.getTechnicianId() != null){
+            orderGoodsClient.subscribe(subscribe.getOrderId(), Math.toIntExact(subscribe.getId()));
+        }
+
     }
 }

--
Gitblit v1.7.1