From e4eaabefaaa2ca95f809c47a11712c3bee56e1b5 Mon Sep 17 00:00:00 2001
From: luofl <1442745593@qq.com>
Date: 星期四, 20 二月 2025 15:07:09 +0800
Subject: [PATCH] 修改物流信息导入模板

---
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/CouponInfoVo.java                         |    3 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/CommissionServiceImpl.java              |    2 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShareController.java                      |   10 +
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderInfoVo.java                                  |    4 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java                       |   36 ++
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java                      |    6 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java                   |  267 +++++++++++++------------
 ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopMapper.xml                                     |    4 
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/UserCoupon.java                        |    9 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/OrderMapper.java                              |    2 
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java               |    5 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/BalanceChangeRecordServiceImpl.java |   23 +
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/OrderSaleNum.java                                 |   11 +
 ruoyi-service/ruoyi-other/Dockerfile                                                                         |   24 ++
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/CouponInfoController.java                 |    3 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java             |    4 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WithdrawalRequestsController.java     |   18 +
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/feignClient/OrderClient.java                         |    4 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopServiceImpl.java                    |   14 +
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsEvaluateController.java              |    2 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/BalanceChangeRecordController.java    |   15 +
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/WalletStatisticsDetail.java                   |    4 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/OrderService.java                            |    2 
 ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java         |    9 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java                |   32 ++
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/factory/OrderClientFallbackFactory.java              |    6 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/VipCenterController.java              |   31 +-
 ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AppUserMapper.xml                              |    2 
 ruoyi-service/ruoyi-account/src/main/resources/mapper/account/BalanceChangeRecordMapper.xml                  |    2 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java             |   13 
 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml                                    |   13 +
 31 files changed, 399 insertions(+), 181 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
index cda96a6..8c7d5f2 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
@@ -81,6 +81,11 @@
 	@PostMapping("/app-user/getAppUserByPhone")
 	R<List<AppUser>> getAppUserByPhone(@RequestParam("phone") String phone);
 
+	/**
+	 * 根据用户电话模糊搜索用户列表(包含被删除的用户)
+	 * @param phone
+	 * @return
+	 */
 	@GetMapping("/app-user/getAppUserByPhoneNoFilter")
 	public R<List<AppUser>> getAppUserByPhoneNoFilter(@RequestParam("phone") String phone);
 
diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/UserCoupon.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/UserCoupon.java
index 58efd03..0d638f2 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/UserCoupon.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/UserCoupon.java
@@ -66,6 +66,15 @@
     @ApiModelProperty(value = "优惠劵id")
     @TableField("coupon_id")
     private Integer couponId;
+
+
+    /**
+     * 优惠券快照
+     */
+    @TableField("coupon_info")
+    private String couponInfo;
+
+
     @ApiModelProperty(value = "优惠劵信息")
     @TableField(exist = false)
     private CouponInfoVo couponInfoVo;
diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/CouponInfoVo.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/CouponInfoVo.java
index 0a360ff..1ccb517 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/CouponInfoVo.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/vo/CouponInfoVo.java
@@ -120,5 +120,8 @@
     @TableField(exist = false)
     private List<String> goodNames;
 
+    @ApiModelProperty(value = "其他商品名称")
+    private String goodsNameJson;
+
 
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/factory/OrderClientFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/factory/OrderClientFallbackFactory.java
index 45c3ff9..5f643be 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/factory/OrderClientFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/factory/OrderClientFallbackFactory.java
@@ -3,6 +3,7 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.order.feignClient.OrderClient;
 import com.ruoyi.order.model.Order;
+import com.ruoyi.order.vo.OrderSaleNum;
 import org.springframework.cloud.openfeign.FallbackFactory;
 
 import java.util.List;
@@ -29,6 +30,11 @@
             }
 
             @Override
+            public R<Integer> getShopSaleNumByShopIds(OrderSaleNum orderSaleNum) {
+                return R.fail("获取门店销售订单数量失败:" + cause.getMessage());
+            }
+
+            @Override
             public R<Set<Long>> getAppUserByShoppingShop(Integer shopId) {
                 return R.fail("获取所有在指定门店消费的用户id失败:" + cause.getMessage());
             }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/feignClient/OrderClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/feignClient/OrderClient.java
index aad932d..b6bcfa4 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/feignClient/OrderClient.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/feignClient/OrderClient.java
@@ -5,6 +5,7 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.order.factory.OrderClientFallbackFactory;
 import com.ruoyi.order.model.Order;
+import com.ruoyi.order.vo.OrderSaleNum;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -40,6 +41,9 @@
     @PostMapping("/order/getShopSaleNum")
     R<Integer> getShopSaleNum(@RequestParam("shopId") Integer shopId, @RequestParam("type") Integer type);
 
+    @PostMapping("/order/getShopSaleNumByShopIds")
+    R<Integer> getShopSaleNumByShopIds(@RequestBody OrderSaleNum orderSaleNum);
+
 
     /**
      * 获取所有在指定门店消费的用户id
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/OrderSaleNum.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/OrderSaleNum.java
new file mode 100644
index 0000000..7bdce48
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/OrderSaleNum.java
@@ -0,0 +1,11 @@
+package com.ruoyi.order.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class OrderSaleNum {
+    private List<Integer> shopIds;
+    private Integer type;
+}
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
index a5735e6..d8e5eba 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
+++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
@@ -91,6 +91,7 @@
 	public LoginUser getLoginUserApplet() {
 		LoginUser loginUserAppletToken = getLoginUserAppletToken(ServletUtils.getRequest());
 		if (loginUserAppletToken == null) {
+			System.out.println("loginUserAppletToken: "+loginUserAppletToken);
 			throw new NotPermissionException("令牌已过期,请重新登录!");
 		}
 		return loginUserAppletToken;
@@ -101,6 +102,14 @@
 		String token = SecurityUtils.getToken(request);
 		return getLoginUserApplet(token);
 	}
+
+	/**
+	 * 判断用户是否登录
+	 */
+	public boolean isLoginApplet() {
+		LoginUser loginUserAppletToken = getLoginUserAppletToken(ServletUtils.getRequest());
+		return loginUserAppletToken != null;
+	}
 	
 	/**
 	 * 小程序 获取用户身份信息
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
index b4a58f0..7f61832 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java
@@ -131,6 +131,7 @@
 
     @PostMapping("/getAppUserById")
     public AppUser getAppUserById(@RequestParam("id") Long id) {
+        System.out.println("根据id获取用户:"+id);
         return appUserService.getById(id);
     }
 
@@ -399,23 +400,42 @@
     @GetMapping("/change")
     @ApiOperation(value = "推广中心", tags = {"小程序-推广中心"})
     public R<AppUser> change(@ApiParam("换绑用户手机号") String phone) {
+
         Long userId1 = tokenService.getLoginUserApplet().getUserid();
         AppUser byId = appUserService.getById(userId1);
-        List<AppUser> appUserList = appUserService.list(new LambdaQueryWrapper<AppUser>()
-                .eq(AppUser::getInviteUserId, userId1)
-                .eq(AppUser::getPhone, phone));
-        if (!CollectionUtils.isEmpty(appUserList)){
-            return R.fail("绑定关系已存在!");
-        }
+
+
+
+//        List<AppUser> appUserList = appUserService.list(new LambdaQueryWrapper<AppUser>()
+//                .eq(AppUser::getInviteUserId, userId1)
+//                .eq(AppUser::getPhone, phone));
+//        if (!CollectionUtils.isEmpty(appUserList)){
+//            return R.fail("绑定关系已存在!");
+//        }
         //获取绑定门店
         AppUser user = appUserService.lambdaQuery()
                 .eq(AppUser::getPhone, phone)
                 .eq(AppUser::getDelFlag, 0)
                 .eq(AppUser::getStatus, 1)
                 .one();
+
+
+        // 获取当前用户的所有下级
+        List<AppUser> allSubordinates = getAllSubordinates(byId.getId());
+        long count = allSubordinates.stream().filter(appUser -> appUser.getId().equals(user.getId())).count();
+        if (count > 0) {
+            return R.fail("绑定关系已存在!");
+        }
+
         if (user == null) {
             return R.fail("当前手机号未注册");
         }
+
+        Long userId = user.getId();
+        if (userId.equals(byId.getId())) {
+            return R.fail("不能选择自己为绑定人。");
+        }
+
         byId.setInviteUserId(user.getId());
         appUserService.updateById(byId);
         return R.ok();
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/BalanceChangeRecordController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/BalanceChangeRecordController.java
index 49f11fc..e5ee3d1 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/BalanceChangeRecordController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/BalanceChangeRecordController.java
@@ -2,11 +2,9 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.account.api.model.AppUser;
 import com.ruoyi.account.api.model.BalanceChangeRecord;
 import com.ruoyi.account.dto.BalanceQuery;
 import com.ruoyi.account.service.BalanceChangeRecordService;
-import com.ruoyi.account.vo.CommissionDetail;
 import com.ruoyi.account.vo.CommissionStatistics;
 import com.ruoyi.account.vo.WalletStatistics;
 import com.ruoyi.account.vo.WalletStatisticsDetail;
@@ -18,6 +16,7 @@
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -48,7 +47,17 @@
     @ApiOperation(value = "余额变更明细", tags = {"后台"})
     public R<IPage<BalanceChangeRecord>> page(@RequestBody BalanceQuery agentQuery) {
 
-        return R.ok(balanceChangeRecordService.pageList(agentQuery));
+        IPage<BalanceChangeRecord> page = balanceChangeRecordService.pageList(agentQuery);
+        for (BalanceChangeRecord record : page.getRecords()) {
+            BigDecimal beforeAmount = record.getBeforeAmount();
+            BigDecimal afterAmount = record.getAfterAmount();
+            if (beforeAmount.compareTo(afterAmount) > 0){
+                record.setFlag(2);
+            }else {
+                record.setFlag(1);
+            }
+        }
+        return R.ok(page);
     }
 
     /**
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java
index 6dfc084..2323b6d 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserCouponController.java
@@ -88,9 +88,9 @@
         Page<UserCoupon> page = chainWrapper.page(Page.of(pageNum-1, pageSize));
         for (UserCoupon record : page.getRecords()) {
             record.setIdStr(record.getId().toString());
-            CouponInfo data = couponClient.detail(record.getCouponId()).getData();
-            CouponInfoVo vo = new CouponInfoVo();
-            BeanUtils.copyProperties(data,vo);
+            String couponInfo = record.getCouponInfo();
+            CouponInfoVo vo = JSON.parseObject(couponInfo, CouponInfoVo.class);
+//            BeanUtils.copyProperties(data,vo);
             //如果是商品券,将商品名称返回
             if (vo.getCouponType()==4){
                 List<String> goodNames = new ArrayList<>();
@@ -98,8 +98,8 @@
                     List<Goods> data1 = goodsClient.getAllGoods().getData();
                     List<String> collect = data1.stream().map(Goods::getName).collect(Collectors.toList());
                     goodNames.addAll(collect);
-                }else if(StringUtils.isEmpty(data.getForGoodIds())){
-                    goodNames.addAll(JSON.parseArray(data.getGoodsNameJson(), String.class));
+                }else if(StringUtils.isEmpty(vo.getForGoodIds())){
+                    goodNames.addAll(JSON.parseArray(vo.getGoodsNameJson(), String.class));
                 }else {
                     String[] split = vo.getForGoodIds().split(",");
                     R<List<Goods>> goodsById = goodsClient.getGoodsById(split);
@@ -255,9 +255,12 @@
                 userPointService.save(userPoint);
             }
         }
+
+
         //增加优惠券记录,根据时间类型设置开始结束时间
         UserCoupon userCoupon = new UserCoupon();
         userCoupon.setAppUserId(userid);
+        userCoupon.setCouponInfo(JSON.toJSONString(data));
         if (data.getPeriodType()==1) {
             userCoupon.setStartTime(data.getPeriodStartTime().atTime(0, 0, 0));
             userCoupon.setEndTime(data.getPeriodEndTime().atTime(23, 59, 59));
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 1be9a3f..2320d8a 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
@@ -12,6 +12,7 @@
 import com.ruoyi.account.vo.vip.VipLevel;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.utils.bean.BeanUtils;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.other.api.domain.*;
@@ -87,29 +88,27 @@
             VipLevel vipLevel = new VipLevel();
             List<Level> levelList = new ArrayList<>();
 
-            // 批量获取 goodsVip 和 vipGoods
-            List<Integer> vipIds = vipSettingList.stream().map(VipSetting::getId).collect(Collectors.toList());
-            Map<Integer, R<List<VipGood>>> vipGoodsMap = getVipGoods(vipIds);
-
             vipSettingList.forEach(vipSetting -> {
                 Level level = new Level();
                 level.setName(vipSetting.getVipName());
                 BeanUtils.copyBeanProp(level, vipSetting);
                 level.setVipDesc(baseSetting.getContent());
 
-                R<List<VipGood>> vipGoodR = vipGoodsMap.get(vipSetting.getId());
-                if (R.isError(vipGoodR)) {
-                    throw new ServiceException("会员商品获取失败");
+
+                List<String> goodsNames = new ArrayList<>();
+                if (StringUtils.isNotEmpty(vipSetting.getGoodIds())){
+                    String[] goodsIds = vipSetting.getGoodIds().split(",");
+                    List<Goods> goodsList = goodsClient.getGoodsById(goodsIds).getData();
+                    if (goodsList != null) {
+                        for (Goods goods : goodsList) {
+                            if (goods.getDelFlag().equals(0)){
+                                goodsNames.add(goods.getName());
+                            }
+                        }
+                    }
                 }
-                List<VipGood> vipGoodList = vipGoodR.getData();
-                if (vipGoodList != null && !vipGoodList.isEmpty()) {
-                    List<String> goodsNames = new ArrayList<>();
-                    vipGoodList.forEach(vipGood -> {
-                        Goods goods = JSON.parseObject(vipGood.getGood_json(), Goods.class);
-                        goodsNames.add(goods.getName());
-                    });
-                    level.setGoodsNames(goodsNames);
-                }
+
+                level.setGoodsNames(goodsNames);
                 levelList.add(level);
             });
 
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 c792884..2472e5f 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
@@ -19,6 +19,8 @@
 import com.ruoyi.account.vo.WithdrawalAuth;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.system.api.model.LoginUser;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -49,6 +51,8 @@
     
     @Resource
     private BalanceChangeRecordService balanceChangeRecordService;
+    @Resource
+    private TokenService tokenService;
 
     /**
      * 提现申请
@@ -112,6 +116,20 @@
                 singlePay.setCallbackUrl("/account/withdrawal-requests/withdrawalCallback");
                 SinglePayResult singlePayResult = TransferUtil.singlePay(singlePay);
                 if(null == singlePayResult){
+                    LoginUser loginUserApplet = tokenService.getLoginUserApplet();
+                    AppUser appUser = appUserService.getById(loginUserApplet.getUserid());
+                    BigDecimal balance = appUser.getBalance();
+                    BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord();
+                    balanceChangeRecord.setAppUserId(appUser.getId());
+                    balanceChangeRecord.setVipId(appUser.getVipId());
+//                    balanceChangeRecord.setOrderId(withdrawalRequests.getId());
+                    balanceChangeRecord.setChangeType(2);
+                    balanceChangeRecord.setBeforeAmount(balance);
+                    balanceChangeRecord.setChangeAmount(withdrawalAmount);
+                    balanceChangeRecord.setAfterAmount(appUser.getBalance());
+                    balanceChangeRecord.setDelFlag(0);
+                    balanceChangeRecord.setCreateTime(LocalDateTime.now());
+                    balanceChangeRecordService.save(balanceChangeRecord);
                     return R.fail("转账失败");
                 }
                 withdrawal.setStatus(1);
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java
index 8b2d736..d96f746 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java
@@ -492,8 +492,8 @@
 		loginVo.setFailureTime(Long.valueOf(tokenApplet.get("expires_in").toString()));
 		return R.ok(loginVo);
 	}
-	
-	
+
+
 	/**
 	 * 会员等级变化
 	 */
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/BalanceChangeRecordServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/BalanceChangeRecordServiceImpl.java
index 930fd41..733c3ef 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/BalanceChangeRecordServiceImpl.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/BalanceChangeRecordServiceImpl.java
@@ -78,9 +78,22 @@
 
         List<BalanceChangeRecord> balanceChangeRecordList = this.baseMapper.selectBalanceChangeRecordList1(balanceChangeRecord);
         List<WalletStatisticsDetail> walletStatisticsDetailList = new ArrayList<>();
+        BigDecimal totalWithdraw = BigDecimal.ZERO;
         for (BalanceChangeRecord changeRecord : balanceChangeRecordList) {
+
             WalletStatisticsDetail walletStatisticsDetail = new WalletStatisticsDetail();
             BeanUtils.copyBeanProp(walletStatisticsDetail, changeRecord);
+
+            BigDecimal beforeAmount = changeRecord.getBeforeAmount();
+            BigDecimal afterAmount = changeRecord.getAfterAmount();
+
+            if (beforeAmount.compareTo(afterAmount) < 0 && changeRecord.getChangeType().equals(2)){
+                BigDecimal changeAmount = changeRecord.getChangeAmount();
+                totalWithdraw = totalWithdraw.add(changeAmount);
+                walletStatisticsDetail.setFlag(2);
+            }else {
+                walletStatisticsDetail.setFlag(1);
+            }
             walletStatisticsDetailList.add(walletStatisticsDetail);
         }
         // 按时间排序(倒序)
@@ -113,15 +126,15 @@
                 ));
 
         BigDecimal totalRecharge = shopCommissionMap.get(1);
-        BigDecimal totalWithdraw = shopCommissionMap.get(2);
         BigDecimal totalShopWithdraw = shopCommissionMap.get(7);
 
         List<WalletStatisticsDetail> walletStatisticsDetailList2 = walletStatisticsDetailList.subList(fromIndex, toIndex);
         for (WalletStatisticsDetail changeRecord : walletStatisticsDetailList2) {
-            if (changeRecord.getChangeType().equals(1) || changeRecord.getChangeType().equals(3) || changeRecord.getChangeType().equals(4) || changeRecord.getChangeType().equals(6)) {
-                changeRecord.setChangeAmountString("+¥" + changeRecord.getChangeAmount());
-            } else {
-                changeRecord.setChangeAmountString("-¥" + changeRecord.getChangeAmount());
+            Integer flag = changeRecord.getFlag();
+            if (flag.equals(1)){
+                changeRecord.setChangeAmountString("+¥"+changeRecord.getChangeAmount());
+            }else {
+                changeRecord.setChangeAmountString("-¥"+changeRecord.getChangeAmount());
             }
             walletStatisticsDetailPage.setCurrent(current);
             walletStatisticsDetailPage.setSize(size);
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/WalletStatisticsDetail.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/WalletStatisticsDetail.java
index 5a9932c..d6c7592 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/WalletStatisticsDetail.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/WalletStatisticsDetail.java
@@ -1,5 +1,6 @@
 package com.ruoyi.account.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.core.annotation.Excel;
 import io.swagger.annotations.ApiModelProperty;
@@ -50,4 +51,7 @@
     @ApiModelProperty(value = "变更数量--带金额符号")
     @Excel(name = "变更数量")
     private String changeAmountString;
+
+    @ApiModelProperty(value = "增或减标识: 1-增 2-减")
+    private Integer flag;
 }
diff --git a/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AppUserMapper.xml b/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AppUserMapper.xml
index 2b6442c..2de786e 100644
--- a/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AppUserMapper.xml
+++ b/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AppUserMapper.xml
@@ -144,7 +144,7 @@
     </select>
     <select id="getUserStatisticsDetail" resultType="com.ruoyi.account.vo.UserStatisticsDetail">
         SELECT
-            SUM(tau.total_point) totalScore,
+            SUM(tau.shop_point+tau.share_point+tau.total_invite_point+tau.total_register_point+tau.total_share_point+tau.total_sign_point+tau.total_hour_point+total_performance_point) totalScore,
             SUM(tau.shop_point) consumeScore,
             SUM(tau.share_point) rebateScore,
             SUM(tau.total_invite_point) inviteScore,
diff --git a/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/BalanceChangeRecordMapper.xml b/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/BalanceChangeRecordMapper.xml
index 2b746ac..b8a8044 100644
--- a/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/BalanceChangeRecordMapper.xml
+++ b/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/BalanceChangeRecordMapper.xml
@@ -70,7 +70,7 @@
         tbcr.after_amount
         FROM
         t_balance_change_record tbcr
-        LEFT JOIN t_app_user tau ON tbcr.app_user_id = tau.id
+        LEFT JOIN t_app_user tau ON tbcr.app_user_id = tau.id and tau.del_flag = 0
         <where>
             <if test="changeRecord.userName != null and changeRecord.userName != ''">
                 and tau.name like concat('%',#{changeRecord.userName},'%')
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 5725964..3cdd650 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
@@ -461,6 +461,12 @@
         return R.ok(shopSaleNum);
     }
 
+    @PostMapping("/getShopSaleNumByShopIds")
+    public R<Integer> getShopSaleNumByShopIds(@RequestBody OrderSaleNum orderSaleNum){
+        Integer shopSaleNum = orderService.getShopSaleNumByShopIds(orderSaleNum.getShopIds(), orderSaleNum.getType());
+        return R.ok(shopSaleNum);
+    }
+
 
     /**
      * 获取所有在指定门店消费的用户id
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/OrderMapper.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/OrderMapper.java
index 903558a..7ba40ee 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/OrderMapper.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/OrderMapper.java
@@ -55,4 +55,6 @@
      * @return
      */
     Integer getShopSaleNum(@Param("shopId") Integer shopId, @Param("type") Integer type);
+
+    Integer getShopSaleNumByShopIds(@Param("shopIds") List<Integer> shopIds, @Param("type") Integer type);
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/OrderService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/OrderService.java
index 7654f37..1eb3a91 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/OrderService.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/OrderService.java
@@ -117,4 +117,6 @@
      * 导入物流信息
      */
     void importExpress(String url);
+
+    Integer getShopSaleNumByShopIds(List<Integer> shopIds, Integer type);
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/CommissionServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/CommissionServiceImpl.java
index 4d2ecd1..df1753c 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/CommissionServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/CommissionServiceImpl.java
@@ -69,7 +69,7 @@
                     .eq(OrderGood::getOrderId, order.getId()));
             AppUser appUser = appUserClient.getAppUserById(order.getAppUserId());
             if(null == appUser){
-                return;
+                continue;
             }
             //直推上级分佣金额
             BigDecimal ztsj_price = BigDecimal.ZERO;
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
index b1ad99e..51203ac 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -66,7 +66,7 @@
 
 /**
  * <p>
- *  服务实现类
+ * 服务实现类
  * </p>
  *
  * @author luodangjia
@@ -90,22 +90,22 @@
     private CommissionService commissionService;
     @Resource
     private BaseSettingClient baseSettingClient;
-    
+
     @Resource
     private SysUserClient sysUserClient;
-    
+
     @Resource
     private BalanceChangeRecordClient balanceChangeRecordClient;
-    
+
     @Resource
     private UserPointClient userPointClient;
-    
+
     @Resource
     private OrderBalancePaymentService orderBalancePaymentService;
-    
+
     @Resource
     private VipSettingClient vipSettingClient;
-    
+
     @Resource
     private GoodsClient goodsClient;
 
@@ -115,22 +115,21 @@
     private TechnicianSubscribeClient technicianSubscribeClient;
     @Resource
     private ShopBalanceStatementClient shopBalanceStatementClient;
-    
+
     @Resource
     private RedisTemplate redisTemplate;
-    
+
     @Resource
     private SystemConfigClient systemConfigClient;
 
     @Resource
     private UserCouponClient userCouponClient;
-    
+
     @Resource
     private UserChangeLogClient userChangeLogClient;
 
     @Resource
     private RegionClient regionClient;
-    
 
 
     @Override
@@ -139,16 +138,14 @@
     }
 
 
-
-
     @Override
     public OrderDetailVO getOrderDetail(Long orderId) {
         Order order = orderMapper.selectById(orderId);
-        if (order == null){
+        if (order == null) {
             throw new ServiceException("订单不存在");
         }
         R<Shop> shopR = shopClient.getShopById(order.getShopId());
-        if (!R.isSuccess(shopR)){
+        if (!R.isSuccess(shopR)) {
             throw new ServiceException("获取门店信息失败");
         }
 
@@ -174,20 +171,20 @@
         // 收货地址
         String addressJson = order.getAddressJson();
         UserAddress userAddress = new UserAddress();
-        if (2 == order.getDistributionMode()){
+        if (2 == order.getDistributionMode()) {
             userAddress = JSONObject.parseObject(addressJson, UserAddress.class);
         }
         // 优惠券
         String couponJson = order.getCouponJson();
         CouponInfo couponInfo = new CouponInfo();
-        if (StringUtils.isNotEmpty(couponJson)){
+        if (StringUtils.isNotEmpty(couponJson)) {
             couponInfo = JSONObject.parseObject(couponJson, CouponInfo.class);
         }
 
         // 参与活动
         String activityJson = order.getActivityJson();
         OrderActivityInfo orderActivityInfo = new OrderActivityInfo();
-        if (StringUtils.isNotEmpty(activityJson)){
+        if (StringUtils.isNotEmpty(activityJson)) {
             orderActivityInfo = JSONObject.parseObject(activityJson, OrderActivityInfo.class);
         }
         OrderDetailVO orderDetailVO = new OrderDetailVO();
@@ -216,15 +213,15 @@
         orderDetailVO.setLongitude(shop.getLongitude());
         orderDetailVO.setLatitude(shop.getLatitude());
         orderDetailVO.setShopId(shop.getId());
-        if(StringUtils.isNotEmpty(order.getExpressResult())){
+        if (StringUtils.isNotEmpty(order.getExpressResult())) {
             MapTrackKD100Vo mapTrackKD100Vo = JSON.parseObject(order.getExpressResult(), MapTrackKD100Vo.class);
             List<QueryKD100ListVo> data = mapTrackKD100Vo.getData();
             orderDetailVO.setExpress(null != data && data.size() > 0 ? data.get(0).getContext() : "");
         }
-        
-        if(order.getOrderType() == 1){
+
+        if (order.getOrderType() == 1) {
             List<TechnicianSubscribe> data = technicianSubscribeClient.getTechnicianSubscribeList(order.getId()).getData();
-            if(data.size() > 0){
+            if (data.size() > 0) {
                 Long id = data.get(0).getId();
                 orderDetailVO.setTechnicianSubscribeId(id.toString());
                 Technician technician = technicianClient.shopdetail(order.getTechnicianId()).getData();
@@ -246,11 +243,11 @@
     @Override
     public boolean check(Order order, Integer shopId, Long userId) {
         R<List<AppUserShop>> r = appUserClient.getAppUserShop(userId);
-        if (r.getCode() != R.SUCCESS){
+        if (r.getCode() != R.SUCCESS) {
             throw new ServiceException("获取用户门店信息失败");
         }
         List<AppUserShop> appUserShopList = r.getData();
-        if (appUserShopList == null || appUserShopList.isEmpty()){
+        if (appUserShopList == null || appUserShopList.isEmpty()) {
             return false;
         }
 
@@ -258,12 +255,12 @@
         List<AppUserShop> userShopList = appUserShopList.stream()
                 .filter(appUserShop -> appUserShop.getShopId().equals(shopId))
                 .collect(Collectors.toList());
-        if (userShopList.isEmpty()){
+        if (userShopList.isEmpty()) {
             return false;
         }
 
         // 判断订单是否属于该门店
-        if (order == null){
+        if (order == null) {
             throw new ServiceException("订单不存在");
         }
 
@@ -276,7 +273,7 @@
         LoginUser loginUserApplet = tokenService.getLoginUserApplet();
         Order order = orderMapper.selectById(id);
         boolean check = check(order, shopId, loginUserApplet.getUserid());
-        if (!check){
+        if (!check) {
             throw new ServiceException("该订单与当前扫码门店不一致");
         }
 
@@ -297,16 +294,17 @@
         order.setAfterSaleTime(LocalDateTime.now().plusDays(days));
         order.setEndTime(LocalDateTime.now());
         order.setCancellerAppUserId(loginUserApplet.getUserid());
-        if(StringUtils.isNotEmpty(technicianId) && !"null".equals(technicianId)){
+        if (StringUtils.isNotEmpty(technicianId) && !"null".equals(technicianId)) {
             order.setTechnicianId(Integer.valueOf(technicianId));
         }
         // TODO
         orderMapper.updateById(order);
     }
-    
-    
+
+
     /**
      * 管理后台获取订单列表数据
+     *
      * @param orderPageList
      * @return
      */
@@ -314,47 +312,46 @@
     public PageInfo<OrderPageListVo> getOrderPageList(OrderPageList orderPageList) {
         Long userid = tokenService.getLoginUser().getUserid();
         SysUser sysUser = sysUserClient.getSysUser(userid).getData();
-        if(2 == sysUser.getRoleType()){
+        if (2 == sysUser.getRoleType()) {
             orderPageList.setShopId(sysUser.getObjectId());
         }
         //搜索条件,用户姓名
-        if(StringUtils.isNotEmpty(orderPageList.getUserName())){
+        if (StringUtils.isNotEmpty(orderPageList.getUserName())) {
             List<AppUser> data = appUserClient.getAppUserByNameNoFilter(orderPageList.getUserName()).getData();
             List<Long> collect = data.stream().map(AppUser::getId).collect(Collectors.toList());
-            if (CollectionUtils.isEmpty(collect)){
+            if (CollectionUtils.isEmpty(collect)) {
                 return new PageInfo<>();
             }
-            if(null != orderPageList.getAppUserIds()){
+            if (null != orderPageList.getAppUserIds()) {
                 List<Long> appUserIds = orderPageList.getAppUserIds();
                 appUserIds.addAll(collect);
                 orderPageList.setAppUserIds(appUserIds);
-            }else{
+            } else {
                 orderPageList.setAppUserIds(collect);
             }
         }
         //搜索条件,用户电话
-        if(StringUtils.isNotEmpty(orderPageList.getPhone())){
+        if (StringUtils.isNotEmpty(orderPageList.getPhone())) {
             List<AppUser> data = appUserClient.getAppUserByPhoneNoFilter(orderPageList.getPhone()).getData();
             List<Long> collect = data.stream().map(AppUser::getId).collect(Collectors.toList());
-            if (CollectionUtils.isEmpty(collect)){
+            if (CollectionUtils.isEmpty(collect)) {
                 return new PageInfo<>();
             }
 
-            if(null != orderPageList.getAppUserIds()){
+            if (null != orderPageList.getAppUserIds()) {
                 List<Long> appUserIds = orderPageList.getAppUserIds();
-                if (!containsAny(appUserIds,collect)) {
+                if (!containsAny(appUserIds, collect)) {
                     return new PageInfo<>();
                 }
                 appUserIds.addAll(collect);
                 orderPageList.setAppUserIds(appUserIds);
-            }else{
+            } else {
                 orderPageList.setAppUserIds(collect);
             }
         }
-        if (null != orderPageList.getAppUserIds()){
+        if (null != orderPageList.getAppUserIds()) {
             orderPageList.setAppUserIds(orderPageList.getAppUserIds().stream().distinct().collect(Collectors.toList()));
         }
-
 
 
         PageInfo<OrderPageListVo> pageInfo = new PageInfo<>(orderPageList.getPageCurr(), orderPageList.getPageSize());
@@ -363,7 +360,7 @@
         for (OrderPageListVo orderPageListVo : list) {
             Long appUserId = orderPageListVo.getAppUserId();
             AppUser appUser = appUserClient.getAppUserById(appUserId);
-            if(null != appUser){
+            if (null != appUser) {
                 orderPageListVo.setUserName(appUser.getName());
                 orderPageListVo.setPhone(appUser.getPhone());
             }
@@ -376,7 +373,7 @@
             orderPageListVo.setGetCommission(reduce);
 
             String expressJson = orderPageListVo.getExpressJson();
-            if (StringUtils.isNotEmpty(expressJson) && !expressJson.equals("NULL")){
+            if (StringUtils.isNotEmpty(expressJson) && !expressJson.equals("NULL")) {
                 JSONObject jsonObject = null;
                 try {
                     jsonObject = JSONObject.parseObject(expressJson);
@@ -415,32 +412,31 @@
     }
 
 
-
-
     /**
      * 小程序取消订单
+     *
      * @param orderId
      * @return
      */
     @Override
     public R cancel(Long orderId) {
         Order order = this.getById(orderId);
-        if(null == order){
+        if (null == order) {
             return R.fail("取消失败");
         }
         Long userid = tokenService.getLoginUserApplet().getUserid();
-        if(!order.getAppUserId().equals(userid)){
+        if (!order.getAppUserId().equals(userid)) {
             return R.fail("取消失败");
         }
-        if(!Arrays.asList(1, 2, 3).contains(order.getOrderStatus())){
+        if (!Arrays.asList(1, 2, 3).contains(order.getOrderStatus())) {
             return R.fail("订单取消失败");
         }
-        if(null != order.getAfterSaleTime() && LocalDateTime.now().isAfter(order.getAfterSaleTime())){
+        if (null != order.getAfterSaleTime() && LocalDateTime.now().isAfter(order.getAfterSaleTime())) {
             return R.fail("订单取消失败");
         }
         order.setOrderStatus(5);
         R r = refundPayMoney(order);
-        if(200 == r.getCode()){
+        if (200 == r.getCode()) {
             this.updateById(order);
         }
         return r;
@@ -448,18 +444,19 @@
 
     /**
      * 确认发货操作
+     *
      * @return
      */
     @Override
     public R confirmDelivery(ConfirmDelivery confirmDelivery) {
         Order order = this.getById(confirmDelivery.getOrderId());
-        if(1 == order.getPayStatus()){
+        if (1 == order.getPayStatus()) {
             return R.fail("订单还未完成支付");
         }
-        if(1 == order.getOrderType() || null == order.getAddressJson()){
+        if (1 == order.getOrderType() || null == order.getAddressJson()) {
             return R.fail("该订单不支付快递配送");
         }
-        if(1 != order.getOrderStatus()){
+        if (1 != order.getOrderStatus()) {
             return R.fail("无效的操作");
         }
         //添加快递号和修改订单状态
@@ -490,54 +487,55 @@
     }
 
 
-    
     /**
      * 取消订单操作
+     *
      * @param orderId
      * @return
      */
     @Override
     public R cancelOrder(Long orderId) {
         Order order = this.getById(orderId);
-        if(Arrays.asList(5, 6, 7).contains(order.getOrderStatus())){
+        if (Arrays.asList(5, 6, 7).contains(order.getOrderStatus())) {
             return R.fail("无效的操作");
         }
-        if(null != order.getAfterSaleTime() && LocalDateTime.now().isAfter(order.getAfterSaleTime())){
+        if (null != order.getAfterSaleTime() && LocalDateTime.now().isAfter(order.getAfterSaleTime())) {
             return R.fail("订单取消失败");
         }
         order.setOrderStatus(5);
         R r = refundPayMoney(order);
-        if(200 == r.getCode()){
+        if (200 == r.getCode()) {
             this.updateById(order);
         }
         return r;
     }
-    
-    
+
+
     /**
      * 返回订单支付金额和回退积分和会员等级
+     *
      * @param order
      */
-    public R refundPayMoney(Order order){
+    public R refundPayMoney(Order order) {
         //开始退款
         Integer payMethod = order.getPayMethod();
         BigDecimal paymentAmount = order.getPaymentAmount();
         AppUser appUser = appUserClient.getAppUserById(order.getAppUserId());
-        if(1 == payMethod){
+        if (1 == payMethod) {
             //微信退款
             RefundResult refund = PaymentUtil.refund(order.getOrderNumber(), "R" + order.getOrderNumber(), paymentAmount.doubleValue(), "/order/order/refundPayMoneyCallback");
-            if("100".equals(refund.getRa_Status())){
+            if ("100".equals(refund.getRa_Status())) {
                 order.setRefundStatus(1);
                 return R.ok();
-            }else{
+            } else {
                 return R.fail(refund.getRc_CodeMsg());
             }
         }
-        if(2 == payMethod){
+        if (2 == payMethod) {
             //余额退款
             OrderBalancePayment orderBalancePayment = orderBalancePaymentService.getOne(new LambdaQueryWrapper<OrderBalancePayment>().eq(OrderBalancePayment::getOrderId, order.getId()));
             BigDecimal balance = appUser.getBalance();
-            if(null != orderBalancePayment){
+            if (null != orderBalancePayment) {
                 appUser.setTotalRedPacketAmount(appUser.getTotalRedPacketAmount().add(orderBalancePayment.getRedPacketAmount()).setScale(2, RoundingMode.HALF_EVEN));
 //                appUser.setTotalDistributionAmount(appUser.getTotalDistributionAmount().add(orderBalancePayment.getDistributionAmount()).setScale(2, RoundingMode.HALF_EVEN));
             }
@@ -546,12 +544,12 @@
             //查询最后一次的消费订单
             Order order1 = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getAppUserId, order.getAppUserId()).eq(Order::getPayStatus, 2)
                     .eq(Order::getDelFlag, 0).in(Order::getOrderStatus, Arrays.asList(1, 2, 3, 4, 8)).ne(Order::getId, order.getId()).last(" order by create_time desc limit 0, 1"));
-            if(null != order1){
+            if (null != order1) {
                 appUser.setLastShopTime(order1.getCreateTime());
-            }else{
+            } else {
                 appUser.setLastShopTime(null);
             }
-        
+
             //构建账户余额流水明细
             BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord();
             balanceChangeRecord.setOrderId(order.getId());
@@ -582,13 +580,13 @@
             appUser.setLavePoint(appUser.getLavePoint() - shopPoint);
             appUser.setAvailablePoint(appUser.getAvailablePoint() - availablePoint);
             appUser.setTotalAvailablePoint(appUser.getTotalAvailablePoint() - availablePoint);
-            if(null != transferablePoint){
+            if (null != transferablePoint) {
                 appUser.setTransferablePoint(appUser.getTransferablePoint() - transferablePoint);
             }
             appUser.setTotalPoint(appUser.getTotalPoint() - shopPoint);
 
             //构建积分流水明细
-            if(shopPoint > 0){
+            if (shopPoint > 0) {
                 UserPoint userPoint = new UserPoint();
                 userPoint.setType(1);
                 userPoint.setHistoricalPoint(lavePoint);
@@ -600,37 +598,37 @@
                 userPointClient.saveUserPoint(userPoint);
             }
             appUserClient.editAppUserById(appUser);
-    
+
             //降级检测
-            if(1 < appUser.getVipId() && appUser.getVipId() < 4){
+            if (1 < appUser.getVipId() && appUser.getVipId() < 4) {
                 appUserClient.vipDemotion(appUser.getId());
             }
             //回退优惠券状态
-            if(null != order.getUserCouponId()){
+            if (null != order.getUserCouponId()) {
                 UserCoupon userCoupon = userCouponClient.getUserCoupon(order.getUserCouponId()).getData();
                 userCoupon.setUseTime(null);
                 userCouponClient.editReturnUse(userCoupon);
             }
         }
-        if(3 == payMethod){
+        if (3 == payMethod) {
             //开始运费退款,积分支付,运费是单独进行支付的,所以需要单独退款
-            if(null != order.getExpressAmount() && BigDecimal.ZERO.compareTo(order.getExpressAmount()) < 0){
+            if (null != order.getExpressAmount() && BigDecimal.ZERO.compareTo(order.getExpressAmount()) < 0) {
                 BigDecimal expressAmount = order.getExpressAmount();
-                if(1 == order.getExpressPayMethod()){
+                if (1 == order.getExpressPayMethod()) {
                     //微信退款
                     RefundResult refund = PaymentUtil.refund(order.getOrderNumber(), "R" + order.getOrderNumber(), expressAmount.doubleValue(), "/order/order/refundExpressPayMoneyCallback");
-                    if("100".equals(refund.getRa_Status())){
+                    if ("100".equals(refund.getRa_Status())) {
                         order.setRefundStatus(1);
                         return R.ok();
-                    }else{
+                    } else {
                         return R.fail(refund.getRc_CodeMsg());
                     }
                 }
-                if(2 == order.getExpressPayMethod()){
+                if (2 == order.getExpressPayMethod()) {
                     //余额退款
                     OrderBalancePayment orderBalancePayment = orderBalancePaymentService.getOne(new LambdaQueryWrapper<OrderBalancePayment>().eq(OrderBalancePayment::getOrderId, order.getId()));
                     BigDecimal balance = appUser.getBalance();
-                    if(null != orderBalancePayment){
+                    if (null != orderBalancePayment) {
                         appUser.setTotalRedPacketAmount(appUser.getTotalRedPacketAmount().add(orderBalancePayment.getRedPacketAmount()).setScale(2, RoundingMode.HALF_EVEN));
 //                        appUser.setTotalDistributionAmount(appUser.getTotalDistributionAmount().add(orderBalancePayment.getDistributionAmount()).setScale(2, RoundingMode.HALF_EVEN));
                     }
@@ -659,14 +657,14 @@
             userPoint1.setObjectId(order.getId());
             List<UserPoint> data = userPointClient.getUserPointList(userPoint1).getData();
             Integer transferablePoint = order.getPoint();
-            if(data.size() > 0){
+            if (data.size() > 0) {
                 UserPoint userPoint = data.get(0);
                 transferablePoint = Integer.valueOf(userPoint.getExtention());
             }
             appUser.setTransferablePoint(appUser.getTransferablePoint() + transferablePoint);
 
             //构建积分流水明细
-            if(order.getPoint() > 0){
+            if (order.getPoint() > 0) {
                 UserPoint userPoint = new UserPoint();
                 userPoint.setType(11);
                 userPoint.setHistoricalPoint(lavePoint);
@@ -688,13 +686,14 @@
 
     /**
      * 取消订单后回调处理
+     *
      * @return
      */
     @Override
     public R refundPayMoneyCallback(RefundCallbackResult refundCallbackResult) {
         String code = refundCallbackResult.getR3_RefundOrderNo().substring(1);
         Order order = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNumber, code));
-        if(null == order || order.getPayStatus() == 1 || order.getOrderStatus() == 6){
+        if (null == order || order.getPayStatus() == 1 || order.getOrderStatus() == 6) {
             return R.ok();
         }
         order.setRefundCode(refundCallbackResult.getR5_RefundTrxNo());
@@ -718,13 +717,13 @@
         appUser.setLavePoint(appUser.getLavePoint() - shopPoint);
         appUser.setAvailablePoint(appUser.getAvailablePoint() - availablePoint);
         appUser.setTotalAvailablePoint(appUser.getTotalAvailablePoint() - availablePoint);
-        if(null != transferablePoint){
+        if (null != transferablePoint) {
             appUser.setTransferablePoint(appUser.getTransferablePoint() - transferablePoint);
         }
         appUser.setTotalPoint(appUser.getTotalPoint() - shopPoint);
 
         //构建积分流水明细
-        if(shopPoint > 0){
+        if (shopPoint > 0) {
             UserPoint userPoint = new UserPoint();
             userPoint.setType(1);
             userPoint.setHistoricalPoint(lavePoint);
@@ -736,14 +735,14 @@
             userPointClient.saveUserPoint(userPoint);
         }
         appUserClient.editAppUserById(appUser);
-    
+
         //降级检测
-        if(1 < appUser.getVipId() && appUser.getVipId() < 4){
+        if (1 < appUser.getVipId() && appUser.getVipId() < 4) {
             appUserClient.vipDemotion(appUser.getId());
         }
 
         //回退优惠券状态
-        if(null != order.getUserCouponId()){
+        if (null != order.getUserCouponId()) {
             UserCoupon userCoupon = userCouponClient.getUserCoupon(order.getUserCouponId()).getData();
             userCoupon.setUseTime(null);
             userCouponClient.editReturnUse(userCoupon);
@@ -754,13 +753,14 @@
 
     /**
      * 取消订单快递费回退
+     *
      * @return
      */
     @Override
     public R refundExpressPayMoneyCallback(RefundCallbackResult refundCallbackResult) {
         String code = refundCallbackResult.getR3_RefundOrderNo().substring(1);
         Order order = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNumber, code));
-        if(null == order || order.getPayStatus() == 1 || order.getOrderStatus() == 6){
+        if (null == order || order.getPayStatus() == 1 || order.getOrderStatus() == 6) {
             return R.ok();
         }
         order.setRefundCode(refundCallbackResult.getR5_RefundTrxNo());
@@ -778,14 +778,14 @@
         userPoint1.setObjectId(order.getId());
         List<UserPoint> data = userPointClient.getUserPointList(userPoint1).getData();
         Integer transferablePoint = order.getPoint();
-        if(data.size() > 0){
+        if (data.size() > 0) {
             UserPoint userPoint = data.get(0);
             transferablePoint = Integer.valueOf(userPoint.getExtention());
         }
         appUser.setTransferablePoint(appUser.getTransferablePoint() + transferablePoint);
 
         //构建积分流水明细
-        if(order.getPoint() > 0){
+        if (order.getPoint() > 0) {
             UserPoint userPoint = new UserPoint();
             userPoint.setType(11);
             userPoint.setHistoricalPoint(lavePoint);
@@ -799,18 +799,17 @@
         return R.ok();
     }
 
-    
-    
-    
+
     /**
      * 收货操作
+     *
      * @param orderId
      * @return
      */
     @Override
     public R receivingOperation(Long orderId) {
         Order order = this.getById(orderId);
-        if(order.getOrderStatus() != 2){
+        if (order.getOrderStatus() != 2) {
             return R.fail("无效的操作");
         }
         order.setOrderStatus(4);
@@ -829,10 +828,11 @@
         this.updateById(order);
         return R.ok();
     }
-    
-    
+
+
     /**
      * 获取订单详情
+     *
      * @param orderId
      * @return
      */
@@ -845,18 +845,18 @@
         orderInfo.setOrderStatus(order.getOrderStatus());
         orderInfo.setCreateTime(order.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
         AppUser appUser = appUserClient.getAppUserById(order.getAppUserId());
-        if(null != appUser){
+        if (null != appUser) {
             orderInfo.setUserName(appUser.getName());
             orderInfo.setPhone(appUser.getPhone());
         }
         orderInfo.setOrderType(order.getOrderType() == 1 ? "服务" : (StringUtils.isNotEmpty(order.getAddressJson()) ? "单品-快递配送" : "单品-上门自提"));
         Shop shop = shopClient.getShopById(order.getShopId()).getData();
-        if(null != shop){
+        if (null != shop) {
             orderInfo.setShopName(shop.getName());
         }
         orderInfo.setPaymentMethod(order.getPayMethod());
         orderInfo.setTotalAmount(order.getTotalAmount());
-        if(StringUtils.isNotEmpty(order.getCouponJson())){
+        if (StringUtils.isNotEmpty(order.getCouponJson())) {
             CouponInfo couponInfo = JSON.parseObject(order.getCouponJson(), CouponInfo.class);
             orderInfo.setCouponName(couponInfo.getCouponName());
         }
@@ -864,7 +864,7 @@
         orderInfo.setExpressAmount(order.getExpressAmount());
         orderInfo.setPaymentAmount(order.getPaymentAmount());
         orderInfo.setGetPoint(order.getGetPoint());
-        if(2 == order.getDistributionMode()){
+        if (2 == order.getDistributionMode()) {
             UserAddress userAddress = JSON.parseObject(order.getAddressJson(), UserAddress.class);
             orderInfo.setRecipient(userAddress.getRecieveName() + "-" + userAddress.getRecievePhone());
             userAddress.setRecieveAddress(userAddress.getProvince() + userAddress.getCity() + userAddress.getDistrict() + userAddress.getRecieveAddress());
@@ -872,9 +872,14 @@
             MapTrackKD100Vo mapTrackKD100Vo = JSON.parseObject(order.getExpressResult(), MapTrackKD100Vo.class);
             orderInfo.setExpress(mapTrackKD100Vo);
         }
+        if (StringUtils.isNotEmpty(order.getExpressJson()) && !order.getExpressJson().equals("NULL")){
+            JSONObject jsonObject = JSON.parseObject(order.getExpressJson());
+            orderInfo.setExpressCompany(jsonObject.getString("com"));
+            orderInfo.setExpressNumber(jsonObject.getString("num"));
+        }
+
         List<OrderGood> orderGoods = orderGoodMapper.selectList(new LambdaQueryWrapper<OrderGood>().eq(OrderGood::getOrderId, orderId).eq(OrderGood::getDelFlag, 0));
         int sum = orderGoods.stream().mapToInt(OrderGood::getNum).sum();
-        System.out.println("111111111111222");
         orderInfo.setGoodsNum(sum);
         List<Object> goodsJson = new ArrayList<>();
         for (OrderGood orderGood : orderGoods) {
@@ -887,21 +892,21 @@
         }
         orderInfo.setGoodsJson(JSON.toJSONString(goodsJson));
         orderInfo.setPoint(order.getPoint());
-        if(null != order.getAfterSaleTime()){
+        if (null != order.getAfterSaleTime()) {
             orderInfo.setAfterSaleTime(order.getAfterSaleTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
         }
-        if(StringUtils.isNotEmpty(order.getActivityJson())){
+        if (StringUtils.isNotEmpty(order.getActivityJson())) {
             OrderActivityInfo activityInfo = JSON.parseObject(order.getActivityJson(), OrderActivityInfo.class);
             orderInfo.setActivityName(activityInfo.getActivityName());
         }
-        if(null != order.getEndTime()){
+        if (null != order.getEndTime()) {
             AppUser user = appUserClient.getAppUserById(order.getCancellerAppUserId());
             orderInfo.setCanceller(user.getName());
             orderInfo.setWriteOffTime(order.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
         }
-        if(order.getOrderType() == 1){
+        if (order.getOrderType() == 1) {
             List<TechnicianSubscribe> technicianSubscribes = technicianSubscribeClient.getTechnicianSubscribeList(order.getId()).getData();
-            if(technicianSubscribes.size() > 0){
+            if (technicianSubscribes.size() > 0) {
                 Set<Integer> collect = technicianSubscribes.stream().map(TechnicianSubscribe::getTechnicianId).collect(Collectors.toSet());
                 List<Technician> data = technicianClient.getTechnicianByIds(collect).getData();
                 orderInfo.setTechnicianName(data.stream().map(Technician::getName).collect(Collectors.joining(",")));
@@ -916,6 +921,7 @@
 
     /**
      * 获取商品销售数量
+     *
      * @param goodsId
      * @return
      */
@@ -927,6 +933,7 @@
 
     /**
      * 获取店铺订单数量
+     *
      * @param shopId
      * @param type
      * @return
@@ -935,23 +942,23 @@
     public Integer getShopSaleNum(Integer shopId, Integer type) {
         return this.baseMapper.getShopSaleNum(shopId, type);
     }
-    
-    
+
+
     /**
      * 定时查询快递信息
      */
     @Override
     public void taskExpress() {
         Set<Long> order_express = redisTemplate.opsForZSet().rangeByScore("order_express", 0, LocalDateTime.now().toEpochSecond(ZoneOffset.UTC));
-        if(order_express.size() > 0){
+        if (order_express.size() > 0) {
             for (Long id : order_express) {
                 Order order = this.getById(id);
-                if(order.getOrderStatus() != 2){
+                if (order.getOrderStatus() != 2) {
                     redisTemplate.opsForZSet().remove("order_express", id);
                     continue;
                 }
                 String expressJson = order.getExpressJson();
-                if(StringUtils.isEmpty(expressJson)){
+                if (StringUtils.isEmpty(expressJson)) {
                     redisTemplate.opsForZSet().remove("order_express", id);
                     continue;
                 }
@@ -978,7 +985,7 @@
     @Transactional(rollbackFor = Exception.class)
     public void importExpress(String url) {
         URL url1 = new URL(url);
-        try (InputStream  fileInputStream = url1.openStream()) {
+        try (InputStream fileInputStream = url1.openStream()) {
             Workbook workbook = new XSSFWorkbook(fileInputStream);
             Sheet sheet = workbook.getSheetAt(0); // 获取第一个Sheet
             int lastRowNum = sheet.getLastRowNum();
@@ -1002,39 +1009,39 @@
                 Order order = this.getOne(new LambdaQueryWrapper<Order>()
                         .eq(Order::getOrderNumber, orderNum)
                 );
-                if (order == null){
-                    throw new ServiceException("订单不存在:"+orderNum, 500);
+                if (order == null) {
+                    throw new ServiceException("订单不存在:" + orderNum, 500);
                 }
 
                 Integer orderType = order.getOrderType();
-                if (orderType != 2){
-                    throw new ServiceException("该订单:"+orderNum+"类型不为单品订单", 500);
+                if (orderType != 2) {
+                    throw new ServiceException("该订单:" + orderNum + "类型不为单品订单", 500);
                 }
-                if (order.getDistributionMode() != 2){
-                    throw new ServiceException("该订单:"+orderNum+"配送方式不为快递", 500);
+                if (order.getDistributionMode() != 2) {
+                    throw new ServiceException("该订单:" + orderNum + "配送方式不为快递", 500);
                 }
                 Integer orderStatus = order.getOrderStatus();
-                if (orderStatus != 1){
-                    throw new ServiceException("该订单:"+orderNum+"状态不为待发货", 500);
+                if (orderStatus != 1) {
+                    throw new ServiceException("该订单:" + orderNum + "状态不为待发货", 500);
                 }
 
                 String companyNameByCode = ExpressCompanyMap.getCodeByCompanyName(expressName);
-                if(StringUtils.isEmpty(companyNameByCode)){
-                    throw new ServiceException("快递公司名称错误:"+expressName, 500);
+                if (StringUtils.isEmpty(companyNameByCode)) {
+                    throw new ServiceException("快递公司名称错误:" + expressName, 500);
                 }
 
                 R<Region> regionBiCode = regionClient.getRegionBiCode(provinceCode);
                 if (regionBiCode.getData() == null) {
-                    throw new ServiceException("省份编码错误:"+provinceCode, 500);
+                    throw new ServiceException("省份编码错误:" + provinceCode, 500);
                 }
                 R<Region> regionBiCode1 = regionClient.getRegionBiCode(cityCode);
                 if (regionBiCode1.getData() == null) {
-                    throw new ServiceException("城市编码错误:"+cityCode, 500);
+                    throw new ServiceException("城市编码错误:" + cityCode, 500);
                 }
                 JSONObject jsonObject = new JSONObject();
                 jsonObject.put("com", companyNameByCode);
                 jsonObject.put("num", expressNum);
-                ConfirmDelivery confirmDelivery =new ConfirmDelivery();
+                ConfirmDelivery confirmDelivery = new ConfirmDelivery();
                 confirmDelivery.setOrderId(order.getId());
                 confirmDelivery.setCode(jsonObject.toJSONString());
                 confirmDelivery.setDeliverProvince(regionBiCode.getData().getName());
@@ -1056,7 +1063,7 @@
     public static void importExpress2(String filePath) throws MalformedURLException {
         // 从网络地址读取
         URL url = new URL(filePath);
-        try (InputStream  fileInputStream = url.openStream()) {
+        try (InputStream fileInputStream = url.openStream()) {
             Workbook workbook = new XSSFWorkbook(fileInputStream);
 
             Sheet sheet = workbook.getSheetAt(0); // 获取第一个Sheet
@@ -1080,4 +1087,8 @@
         }
     }
 
+    @Override
+    public Integer getShopSaleNumByShopIds(List<Integer> shopIds, Integer type) {
+        return this.baseMapper.getShopSaleNumByShopIds(shopIds, type);
+    }
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderInfoVo.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderInfoVo.java
index 88aa5b8..71aee58 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderInfoVo.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vo/OrderInfoVo.java
@@ -73,5 +73,9 @@
 	private String activityName;
 	@ApiModelProperty("核销码BASE64")
 	private String writeOffCode;
+	@ApiModelProperty("快递公司")
+	private String expressCompany;
+	@ApiModelProperty("快递单号")
+	private String expressNumber;
 	
 }
diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
index 4611723..37f4d66 100644
--- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
+++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -143,4 +143,17 @@
             and order_type = #{type}
         </if>
     </select>
+    <select id="getShopSaleNumByShopIds" resultType="java.lang.Integer">
+        select
+        ifnull(count(1), 0)
+        from t_order a
+        where del_flag = 0 and pay_status = 2 and order_status in (1, 2, 3, 4, 7, 8)
+        and shop_id in
+        <foreach collection="shopIds" item="shopId" separator="," open="(" close=")" index="index">
+            #{shopId}
+        </foreach>
+        <if test="null != type">
+            and order_type = #{type}
+        </if>
+    </select>
 </mapper>
diff --git a/ruoyi-service/ruoyi-other/Dockerfile b/ruoyi-service/ruoyi-other/Dockerfile
new file mode 100644
index 0000000..9e6dc80
--- /dev/null
+++ b/ruoyi-service/ruoyi-other/Dockerfile
@@ -0,0 +1,24 @@
+# 使用官方的 OpenJDK 8 JRE 镜像作为基础镜像
+FROM docker.m.daocloud.io/library/openjdk:8-jre-alpine
+
+# 设置维护者信息
+LABEL maintainer="luofl,mit"
+
+# 创建必要的目录
+RUN mkdir -p /xss/server/logs \
+    && mkdir -p /xss/server/temp
+
+# 设置工作目录
+WORKDIR /xss/server
+
+# 设置默认环境变量(可被运行时覆盖)
+ENV SERVER_PORT=9600
+
+# 声明容器暴露的端口(静态值更可靠)
+EXPOSE 9600
+
+# 将本地构建的 JAR 文件复制到镜像中
+ADD ./target/ruoyi-modules-other.jar ./app.jar
+
+# 定义容器启动时运行的命令
+ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-Dserver.port=${SERVER_PORT}", "-jar", "app.jar"]
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/CouponInfoController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/CouponInfoController.java
index 81f745a..bafefaa 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/CouponInfoController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/CouponInfoController.java
@@ -80,6 +80,9 @@
     @ApiOperation(value = "优惠劵管理-详情", tags = {"管理后台-活动管理"})
     public R<CouponInfo> detail(@RequestParam("id") Integer id) {
         CouponInfo byId = couponInfoService.getById(id);
+        if (byId == null){
+            return R.fail("优惠劵不存在");
+        }
         String forGoodIds = byId.getForGoodIds();
         if (!"-1".equals(forGoodIds) && StringUtils.isNotEmpty(forGoodIds)){
             List<Goods> goods = goodsService.listByIds(Arrays.asList(forGoodIds.split(",")));
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 1f198da..159b064 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
@@ -150,7 +150,7 @@
 
         }
         if (StringUtils.isNotEmpty(goodsEvaluate.getPhone())) {
-            usersPhoneList = appUserClient.getAppUserByPhone(goodsEvaluate.getPhone()).getData().stream().map(AppUser::getId).collect(Collectors.toList());
+            usersPhoneList = appUserClient.getAppUserByPhoneNoFilter(goodsEvaluate.getPhone()).getData().stream().map(AppUser::getId).collect(Collectors.toList());
             if (usersPhoneList.isEmpty()) {
                 return R.ok(new Page<>());
             }
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShareController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShareController.java
index 4f944f3..1d124c7 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShareController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShareController.java
@@ -255,6 +255,16 @@
             userIds.addAll(userList.stream().map(AppUser::getId).collect(Collectors.toList()));
         }
 
+        List<Share> list = shareService.list();
+        if (CollectionUtils.isEmpty(list)){
+            return R.ok(Page.of(pageNum, pageSize));
+        }
+        List<Long> objectIds = list.stream().map(Share::getObjectId).distinct().collect(Collectors.toList());
+        List<AppUser> appUsers = appUserClient.listByIds(objectIds);
+        List<Long> appUserIds = appUsers.stream().filter(item -> !item.getDelFlag()).map(AppUser::getId).collect(Collectors.toList());
+        if (CollectionUtils.isEmpty(userIds)){
+            userIds = appUserIds;
+        }
 
 
         Page<Share> page = shareService.lambdaQuery()
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 0a46602..d4e3f19 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
@@ -15,6 +15,7 @@
 import com.ruoyi.common.security.utils.MD5Generator;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.order.feignClient.OrderClient;
+import com.ruoyi.order.vo.OrderSaleNum;
 import com.ruoyi.order.vo.VerifiableShopVo;
 import com.ruoyi.other.api.domain.*;
 import com.ruoyi.other.mapper.ShopMapper;
@@ -688,14 +689,35 @@
     @ApiOperation(value = "门店统计", tags = {"管理后台-首页统计"})
     public R<ShopStatistics> shopStatistics(@ApiParam("门店id") Integer shopId) {
         ShopStatistics shopStatistics = shopMapper.getShopStatistics(shopId);
-        if(null == shopId){
-            shopId = 0;
+        List<Integer> shopIds;
+
+        shopIds = shopService.list(new LambdaQueryWrapper<Shop>()
+                        .eq(Shop::getDelFlag, 0)
+                        .eq(shopId !=null,Shop::getId, shopId))
+                .stream()
+                .map(Shop::getId)
+                .collect(Collectors.toList());
+
+
+        if (CollectionUtils.isEmpty(shopIds)){
+            shopStatistics.setTotalOrder(0);
+            shopStatistics.setServiceOrder(0);
+            shopStatistics.setGoodsOrder(0);
+        }else {
+            OrderSaleNum serviceOrderSaleNum = new OrderSaleNum();
+            serviceOrderSaleNum.setShopIds(shopIds);
+            serviceOrderSaleNum.setType(1);
+            Integer serviceOrder = orderClient.getShopSaleNumByShopIds(serviceOrderSaleNum).getData();
+
+            OrderSaleNum goodsOrderSaleNum = new OrderSaleNum();
+            goodsOrderSaleNum.setShopIds(shopIds);
+            goodsOrderSaleNum.setType(2);
+            Integer goodsOrder = orderClient.getShopSaleNumByShopIds(goodsOrderSaleNum).getData();
+
+            shopStatistics.setTotalOrder(serviceOrder + goodsOrder);
+            shopStatistics.setServiceOrder(serviceOrder);
+            shopStatistics.setGoodsOrder(goodsOrder);
         }
-        Integer serviceOrder = orderClient.getShopSaleNum(shopId, 1).getData();
-        Integer goodsOrder = orderClient.getShopSaleNum(shopId, 2).getData();
-        shopStatistics.setTotalOrder(serviceOrder + goodsOrder);
-        shopStatistics.setServiceOrder(serviceOrder);
-        shopStatistics.setGoodsOrder(goodsOrder);
         return R.ok(shopStatistics);
     }
     
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopServiceImpl.java
index 68b621e..6a48227 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopServiceImpl.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopServiceImpl.java
@@ -1,5 +1,6 @@
 package com.ruoyi.other.service.impl;
 
+import cn.afterturn.easypoi.cache.manager.IFileLoader;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -8,6 +9,7 @@
 import com.ruoyi.account.api.model.AppUser;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.core.exception.auth.NotPermissionException;
 import com.ruoyi.common.core.utils.GeodesyUtil;
 import com.ruoyi.common.core.utils.ServletUtils;
 import com.ruoyi.common.core.utils.StringUtils;
@@ -137,14 +139,20 @@
 
     @Override
     public ShopDetailVO getShopDetail(Integer shopId, BigDecimal longitude, BigDecimal latitude) {
-        Long userid = tokenService.getLoginUserApplet().getUserid();
+        Long userid = null;
+        if (tokenService.isLoginApplet()){
+            userid = tokenService.getLoginUserApplet().getUserid();
+        }
         // 查询店铺详情
         ShopDetailVO shopDetailVO = shopMapper.selectShopDetail(shopId);
         if (shopDetailVO == null) {
             throw new ServiceException("查询店铺不存在");
         }
-        ShopScore one = shopScoreService.getOne(new LambdaQueryWrapper<ShopScore>().eq(ShopScore::getAppUserId, userid).eq(ShopScore::getShopId, shopId).last(" order by create_time desc limit 0, 1"));
-        shopDetailVO.setMyScore(null == one ? BigDecimal.ZERO : one.getScore());
+        if (userid != null){
+            ShopScore one = shopScoreService.getOne(new LambdaQueryWrapper<ShopScore>().eq(ShopScore::getAppUserId, userid).eq(ShopScore::getShopId, shopId).last(" order by create_time desc limit 0, 1"));
+            shopDetailVO.setMyScore(null == one ? BigDecimal.ZERO : one.getScore());
+        }
+
         // 计算距离
         if (shopDetailVO.getLongitude() != null && shopDetailVO.getLatitude() != null){
             String shopLocation = String.format("%s,%s", shopDetailVO.getLongitude(), shopDetailVO.getLatitude());
diff --git a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopMapper.xml b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopMapper.xml
index dede2fd..49bf7d6 100644
--- a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopMapper.xml
+++ b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopMapper.xml
@@ -68,9 +68,9 @@
             SUM(ts.can_withdraw_money) canWithdrawMoney,
             SUM(ts.withdraw_money) alreadyWithdrawMoney
         FROM
-            t_shop ts
+            t_shop ts where ts.del_flag = 0
             <if test="null != shopId">
-                where ts.id = #{shopId}
+                and ts.id = #{shopId}
             </if>
     </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.7.1