From eb5d7885fa9e4bd20c0827eec9b4cdd48c47b509 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期二, 07 一月 2025 09:11:20 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java       |   61 +
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OrderActivityInfoController.java      |    1 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java     |   14 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/TaskUtil.java                           |   11 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShareController.java                  |    2 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/ShoppingCartPayment.java                      |    2 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/SeckillActivityInfoServiceImpl.java |   29 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopController.java                   |   24 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/BaseSettingController.java            |   10 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java               |  234 ++++++++
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/VipSettingServiceImpl.java          |   22 
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Goods.java                            |    4 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserAddressController.java        |    6 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/ConfirmOrder.java                             |    2 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/payment/PaymentUtil.java                |    7 
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/CouponInfoClientFallbackFactory.java |    5 
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserPointClient.java         |   10 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TechnicianController.java             |    3 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/UserShopService.java                   |   11 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/VipSettingService.java                   |    1 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/payment/PaymentUtil.java                    |    7 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/ShoppingCart.java                          |    4 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java           |   14 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/VipSettingServiceImpl.java      |   73 --
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserPointFallbackFactory.java    |    7 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java        |  163 ++++--
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/VipSettingService.java               |    1 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/TransferPoint.java                        |   19 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AppUserController.java            |   11 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/CommissionServiceImpl.java          |  105 ++--
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/task/TaskUtil.java                               |   12 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java                   |   34 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserShopServiceImpl.java          |    8 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ShoppingCartService.java                 |    2 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/Order.java                                 |   12 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java                  |   52 ++
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java          |   27 
 ruoyi-service/ruoyi-other/src/main/resources/mapper/other/SeckillActivityInfoMapper.xml                  |   32 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/RefundPassServiceImpl.java          |   18 
 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/MyShoppingCartVo.java                         |    2 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/CouponInfoController.java             |   11 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java         |   57 +
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserPointService.java                |    3 
 ruoyi-service/ruoyi-other/src/main/resources/mapper/other/GoodsMapper.xml                                |   54 +-
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/GoodsMapper.java                          |    3 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/SeckillActivityVO.java                        |    3 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/payment/PaymentUtil.java                    |    9 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/OrderService.java                        |   20 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ShoppingCartController.java           |    2 
 ruoyi-service/ruoyi-account/src/main/resources/mapper/account/AppUserMapper.xml                          |    2 
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/CouponInfoClient.java            |    9 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java               |  215 +++++++-
 52 files changed, 1,006 insertions(+), 444 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserPointFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserPointFallbackFactory.java
index 96ac46e..e282ec1 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserPointFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/UserPointFallbackFactory.java
@@ -5,6 +5,8 @@
 import com.ruoyi.common.core.domain.R;
 import org.springframework.cloud.openfeign.FallbackFactory;
 
+import java.util.List;
+
 /**
  * @author zhibing.pu
  * @Date 2024/12/2 15:04
@@ -17,6 +19,11 @@
 			public R saveUserPoint(UserPoint userPoint) {
 				return R.fail("保存积分流水记录失败:" + cause.getMessage());
 			}
+
+			@Override
+			public R<List<UserPoint>> getUserPointList(UserPoint userPoint) {
+				return R.fail("获取积分变动明细失败:" + cause.getMessage());
+			}
 		};
 	}
 }
diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserPointClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserPointClient.java
index c7af699..478b03f 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserPointClient.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/UserPointClient.java
@@ -8,6 +8,8 @@
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
+import java.util.List;
+
 /**
  * @author zhibing.pu
  * @Date 2024/12/2 15:04
@@ -23,4 +25,12 @@
 	@PostMapping("/user-point/saveUserPoint")
 	R saveUserPoint(@RequestBody UserPoint userPoint);
 
+
+	/**
+	 * 获取积分变动明细
+	 * @param userPoint
+	 * @return
+	 */
+	@PostMapping("/user-point/getUserPointList")
+	R<List<UserPoint>> getUserPointList(@RequestBody UserPoint userPoint);
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/Order.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/Order.java
index 7b9b5a2..5537061 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/Order.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/Order.java
@@ -170,6 +170,18 @@
     @ApiModelProperty(value = "预计提货时间")
     @TableField("expected_delivery_time")
     private String expectedDeliveryTime;
+
+    @ApiModelProperty("退款状态(1=退款中,2=已退款)")
+    @TableField("refund_status")
+    private Integer refundStatus;
+
+    @ApiModelProperty("退款流水号")
+    @TableField("refund_code")
+    private String refundCode;
+
+    @ApiModelProperty("退款时间")
+    @TableField("refund_time")
+    private LocalDateTime refundTime;
     
 
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/ShoppingCart.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/ShoppingCart.java
index 11b064f..1a7e25e 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/ShoppingCart.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/model/ShoppingCart.java
@@ -27,4 +27,8 @@
     private Integer goodsId;
     @ApiModelProperty("数量")
     private Integer number;
+    @ApiModelProperty("购买类型(1=普通商品,2=秒杀商品)")
+    private Integer type;
+    @ApiModelProperty("状态(0=临时数据,1=购物车数据)")
+    private Integer status;
 }
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/ConfirmOrder.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/ConfirmOrder.java
index 4983fe5..1508b5c 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/ConfirmOrder.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/ConfirmOrder.java
@@ -13,7 +13,7 @@
 public class ConfirmOrder {
 	@ApiModelProperty(value = "购买方式(1=购物车,2=商品详情)", required = true)
 	private Integer position;
-	@ApiModelProperty(value = "购物车数据id,数量 JSON[{id:1212,num:2}]", required = true)
+	@ApiModelProperty(value = "购物车数据id,数量 JSON[{id:1212,num:2,type:1}]", required = true, notes = "type值取值范围(1=普通商品,2=秒杀商品)")
 	private String goodsJson;
 	@ApiModelProperty(value = "支付方式(1=现金,2=积分)", required = true)
 	private Integer paymentType;
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/MyShoppingCartVo.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/MyShoppingCartVo.java
index 922e250..bbb1c05 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/MyShoppingCartVo.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/MyShoppingCartVo.java
@@ -15,6 +15,8 @@
 public class MyShoppingCartVo {
 	@ApiModelProperty("数据id")
 	private String id;
+	@ApiModelProperty("购买类型(1=普通商品,2=秒杀商品)")
+	private Integer type;
 	@ApiModelProperty("商品id")
 	private Integer goodsId;
 	@ApiModelProperty("封面图")
diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/ShoppingCartPayment.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/ShoppingCartPayment.java
index 056104b..772b6ad 100644
--- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/ShoppingCartPayment.java
+++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/vo/ShoppingCartPayment.java
@@ -11,7 +11,7 @@
 @Data
 @ApiModel
 public class ShoppingCartPayment {
-	@ApiModelProperty(value = "购物车数据id,数量 JSON[{id:1212,num:2}]", required = true)
+	@ApiModelProperty(value = "购物车数据id,数量 JSON[{id:1212,num:2,type:1}]", required = true)
 	private String goodsJson;
 	@ApiModelProperty(value = "支付方式(1=微信,2=账户余额,3=积分)", required = true)
 	private Integer paymentType;
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Goods.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Goods.java
index df0aada..f81f0e7 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Goods.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Goods.java
@@ -149,6 +149,10 @@
     @TableField(exist = false)
     private Integer showStatus;
 
+    @TableField(exist = false)
+    private String payMethod;
+
+
     public String getIdStr() {
         return String.valueOf(id);
     }
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/CouponInfoClientFallbackFactory.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/CouponInfoClientFallbackFactory.java
index b587851..fc091d0 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/CouponInfoClientFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/CouponInfoClientFallbackFactory.java
@@ -19,6 +19,11 @@
 			public R<List<CouponInfo>> getCouponInfoList(List<Integer> ids) {
 				return R.fail("根据id集合获取优惠券数据失败:" + cause.getMessage());
 			}
+
+			@Override
+			public R<List<CouponInfo>> getCouponInfoByPersonType(Integer personType) {
+				return R.fail("根据类型获取有效优惠券列表失败:" + cause.getMessage());
+			}
 		};
 	}
 }
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/CouponInfoClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/CouponInfoClient.java
index 1b447e5..6d36de0 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/CouponInfoClient.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/CouponInfoClient.java
@@ -25,4 +25,13 @@
 	 */
 	@PostMapping("/coupon-info/getCouponInfoList")
 	R<List<CouponInfo>> getCouponInfoList(@RequestParam("ids") List<Integer> ids);
+
+
+	/**
+	 * 根据类型获取有效优惠券列表
+	 * @param personType
+	 * @return
+	 */
+	@PostMapping("/coupon-info/getCouponInfoByPersonType")
+	R<List<CouponInfo>> getCouponInfoByPersonType(@RequestParam("personType") Integer personType);
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java
index 7114d60..00152ac 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java
@@ -22,7 +22,7 @@
      * @param userId 用户ID
      * @return 菜单列表
      */
-    public List<SysMenu> selectMenuList(Long userId);
+    List<SysMenu> selectMenuList(Long userId);
 
     /**
      * 根据用户查询系统菜单列表
@@ -31,7 +31,7 @@
      * @param userId 用户ID
      * @return 菜单列表
      */
-    public List<SysMenu> selectMenuList(SysMenu menu, Long userId);
+    List<SysMenu> selectMenuList(SysMenu menu, Long userId);
 
     /**
      * 根据用户ID查询权限
@@ -39,7 +39,7 @@
      * @param userId 用户ID
      * @return 权限列表
      */
-    public Set<String> selectMenuPermsByUserId(Long userId);
+    Set<String> selectMenuPermsByUserId(Long userId);
 
     /**
      * 根据角色ID查询权限
@@ -47,7 +47,7 @@
      * @param roleId 角色ID
      * @return 权限列表
      */
-    public Set<String> selectMenuPermsByRoleId(Long roleId);
+    Set<String> selectMenuPermsByRoleId(Long roleId);
 
     /**
      * 根据用户ID查询菜单树信息
@@ -55,7 +55,7 @@
      * @param userId 用户ID
      * @return 菜单列表
      */
-    public List<SysMenu> selectMenuTreeByUserId(Long userId);
+    List<SysMenu> selectMenuTreeByUserId(Long userId);
 
     /**
      * 根据角色ID查询菜单树信息
@@ -63,7 +63,7 @@
      * @param roleId 角色ID
      * @return 选中菜单列表
      */
-    public List<Long> selectMenuListByRoleId(Long roleId);
+    List<Long> selectMenuListByRoleId(Long roleId);
 
     /**
      * 构建前端路由所需要的菜单
@@ -71,7 +71,7 @@
      * @param menus 菜单列表
      * @return 路由列表
      */
-    public List<RouterVo> buildMenus(List<SysMenu> menus);
+    List<RouterVo> buildMenus(List<SysMenu> menus);
 
     /**
      * 构建前端所需要树结构
@@ -79,7 +79,7 @@
      * @param menus 菜单列表
      * @return 树结构列表
      */
-    public List<SysMenu> buildMenuTree(List<SysMenu> menus);
+    List<SysMenu> buildMenuTree(List<SysMenu> menus);
 
     /**
      * 构建前端所需要下拉树结构
@@ -87,7 +87,7 @@
      * @param menus 菜单列表
      * @return 下拉树结构列表
      */
-    public List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus);
+    List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus);
 
     /**
      * 根据菜单ID查询信息
@@ -95,7 +95,7 @@
      * @param menuId 菜单ID
      * @return 菜单信息
      */
-    public SysMenu selectMenuById(Long menuId);
+    SysMenu selectMenuById(Long menuId);
 
     /**
      * 是否存在菜单子节点
@@ -103,7 +103,7 @@
      * @param menuId 菜单ID
      * @return 结果 true 存在 false 不存在
      */
-    public boolean hasChildByMenuId(Long menuId);
+    boolean hasChildByMenuId(Long menuId);
 
     /**
      * 查询菜单是否存在角色
@@ -111,7 +111,7 @@
      * @param menuId 菜单ID
      * @return 结果 true 存在 false 不存在
      */
-    public boolean checkMenuExistRole(Long menuId);
+    boolean checkMenuExistRole(Long menuId);
 
     /**
      * 新增保存菜单信息
@@ -119,7 +119,7 @@
      * @param menu 菜单信息
      * @return 结果
      */
-    public int insertMenu(SysMenu menu);
+    int insertMenu(SysMenu menu);
 
     /**
      * 修改保存菜单信息
@@ -127,7 +127,7 @@
      * @param menu 菜单信息
      * @return 结果
      */
-    public int updateMenu(SysMenu menu);
+    int updateMenu(SysMenu menu);
 
     /**
      * 删除菜单管理信息
@@ -135,7 +135,7 @@
      * @param menuId 菜单ID
      * @return 结果
      */
-    public int deleteMenuById(Long menuId);
+    int deleteMenuById(Long menuId);
 
     /**
      * 校验菜单名称是否唯一
@@ -143,11 +143,11 @@
      * @param menu 菜单信息
      * @return 结果
      */
-    public boolean checkMenuNameUnique(SysMenu menu);
+    boolean checkMenuNameUnique(SysMenu menu);
 
     List<SysMenus> getAllMenu();
 
 
-
+    List<SysMenu> getAllMenu(Integer roleType);
 
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/UserShopService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/UserShopService.java
index 27b2dff..1109f81 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/UserShopService.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/UserShopService.java
@@ -3,9 +3,20 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.system.api.model.UserShop;
 
+import java.util.List;
+
 /**
  * @author zhibing.pu
  * @Date 2024/12/2 9:39
  */
 public interface UserShopService extends IService<UserShop> {
+
+
+    /**
+     * 获取关系数据
+     * @param userId
+     * @param roleType
+     * @return
+     */
+    List<UserShop> getUserShop(Long userId, Integer roleType);
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
index b9d09a4..5701160 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
@@ -1,5 +1,6 @@
 package com.ruoyi.system.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.core.constant.Constants;
 import com.ruoyi.common.core.constant.UserConstants;
@@ -231,7 +232,7 @@
         List<Long> tempList = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList());
         for (Iterator<SysMenu> iterator = menus.iterator(); iterator.hasNext();)
         {
-            SysMenu menu = (SysMenu) iterator.next();
+            SysMenu menu = iterator.next();
             // 如果是顶级节点, 遍历该父节点的所有子节点
             if (!tempList.contains(menu.getParentId()))
             {
@@ -506,7 +507,7 @@
         List<SysMenu> returnList = new ArrayList<SysMenu>();
         for (Iterator<SysMenu> iterator = list.iterator(); iterator.hasNext();)
         {
-            SysMenu t = (SysMenu) iterator.next();
+            SysMenu t = iterator.next();
             // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
             if (t.getParentId() == parentId)
             {
@@ -546,7 +547,7 @@
         Iterator<SysMenu> it = list.iterator();
         while (it.hasNext())
         {
-            SysMenu n = (SysMenu) it.next();
+            SysMenu n = it.next();
             if (n.getParentId().longValue() == t.getMenuId().longValue())
             {
                 tlist.add(n);
@@ -573,4 +574,11 @@
         return StringUtils.replaceEach(path, new String[] { Constants.HTTP, Constants.HTTPS, Constants.WWW, "." },
                 new String[] { "", "", "", "/" });
     }
+
+
+    @Override
+    public List<SysMenu> getAllMenu(Integer roleType) {
+        return this.list(new LambdaQueryWrapper<SysMenu>().eq(SysMenu::getRoleType, roleType).eq(SysMenu::getVisible, 0)
+                .eq(SysMenu::getStatus, 0));
+    }
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java
index 569182e..0a926ba 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java
@@ -1,9 +1,11 @@
 package com.ruoyi.system.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.ruoyi.system.api.domain.SysRole;
 import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.api.model.UserShop;
+import com.ruoyi.system.domain.SysMenu;
 import com.ruoyi.system.service.ISysMenuService;
 import com.ruoyi.system.service.ISysPermissionService;
 import com.ruoyi.system.service.ISysRoleService;
@@ -15,6 +17,7 @@
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * 用户权限处理
@@ -22,21 +25,19 @@
  * @author ruoyi
  */
 @Service
-public class SysPermissionServiceImpl implements ISysPermissionService
-{
+public class SysPermissionServiceImpl implements ISysPermissionService {
     @Autowired
     private ISysRoleService roleService;
 
     @Autowired
     private ISysMenuService menuService;
     
-    @Resource
+    @Autowired
     private UserShopService userShopService;
 
     /**
      * 获取角色数据权限
      * 
-     * @param userId 用户Id
      * @return 角色权限信息
      */
     @Override
@@ -58,17 +59,20 @@
     /**
      * 获取菜单数据权限
      * 
-     * @param userId 用户Id
      * @return 菜单权限信息
      */
     @Override
     public Set<String> getMenuPermission(SysUser user)
     {
         Set<String> perms = new HashSet<String>();
+        List<UserShop> userShop = userShopService.getUserShop(user.getUserId(), 1);
         // 管理员拥有所有权限
         if (user.isAdmin())
         {
             perms.add("*:*:*");
+        }else if(user.getRoleType() == 2 && null != userShop && userShop.size() > 0){
+            List<SysMenu> list = menuService.getAllMenu(2);
+            return list.stream().map(SysMenu::getPath).collect(Collectors.toSet());
         }
         else
         {
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserShopServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserShopServiceImpl.java
index 95cc931..5267a1e 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserShopServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserShopServiceImpl.java
@@ -1,10 +1,13 @@
 package com.ruoyi.system.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.system.api.model.UserShop;
 import com.ruoyi.system.mapper.UserShopMapper;
 import com.ruoyi.system.service.UserShopService;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * @author zhibing.pu
@@ -13,4 +16,9 @@
 
 @Service
 public class UserShopServiceImpl extends ServiceImpl<UserShopMapper, UserShop> implements UserShopService {
+
+    @Override
+    public List<UserShop> getUserShop(Long userId, Integer roleType) {
+        return this.list(new LambdaQueryWrapper<UserShop>().eq(UserShop::getUserId, userId).eq(UserShop::getRoleType, roleType));
+    }
 }
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 af03a28..db0c2d6 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
@@ -99,7 +99,6 @@
     }
 
 
-    @ResponseBody
     @PostMapping("/getAppUserById")
     public AppUser getAppUserById(@RequestParam("id") Long id) {
         return appUserService.getById(id);
@@ -465,16 +464,6 @@
         AppUser byId = appUserService.getById(id);
         byId.setVipId(byId.getVipId() - 1);
         appUserService.updateById(byId);
-        //执行降级标记代码
-        new Thread(new Runnable() {
-            @Override
-            public void run() {
-                {
-                    vipSettingService.downUsers();
-                }
-            }
-        }
-        ).start();
         return R.ok();
     }
 
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserAddressController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserAddressController.java
index c8b2c71..67e2f25 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserAddressController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserAddressController.java
@@ -62,9 +62,8 @@
     @ResponseBody
     @PostMapping("/add")
     @ApiOperation(value = "添加", tags = {"小程序-个人中心首页-我的地址"})
-    public R add(@RequestBody UserAddress userAddress){
+    public R<String> add(@RequestBody UserAddress userAddress){
         Long userId = tokenService.getLoginUserApplet().getUserid();
-
         if (userAddress.getIsDefault()==1){
             List<UserAddress> list = userAddressService.lambdaQuery().eq(UserAddress::getAppUserId, userId).list();
             for (UserAddress userAddress1 : list) {
@@ -72,10 +71,9 @@
             }
             userAddressService.updateBatchById(list);
         }
-
         userAddress.setAppUserId(userId);
         userAddressService.save(userAddress);
-        return R.ok();
+        return R.ok(userAddress.getId().toString());
     }
 
     @ResponseBody
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java
index 9afbe26..dc5612c 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/UserPointController.java
@@ -1,11 +1,13 @@
 package com.ruoyi.account.controller;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.account.api.model.UserPoint;
 import com.ruoyi.account.service.AppUserService;
 import com.ruoyi.account.service.UserPointService;
+import com.ruoyi.account.vo.TransferPoint;
 import com.ruoyi.account.vo.UserPointDetailVO;
 import com.ruoyi.account.vo.UserPointStatistics;
 import com.ruoyi.account.vo.UserPointVO;
@@ -92,9 +94,8 @@
      */
     @PostMapping("/transferPoint")
     @ApiOperation("转赠积分")
-    public R<Void> transferPoint(@ApiParam("积分") @RequestParam BigDecimal point, @ApiParam("手机号") @RequestParam String phone) {
-        userPointService.transferPoint(point, phone);
-        return R.ok();
+    public R<Void> transferPoint(@RequestBody TransferPoint transferPoint) {
+        return userPointService.transferPoint(transferPoint.getPoint(), transferPoint.getPhone());
     }
 
 
@@ -152,5 +153,25 @@
     }
 
 
+    /**
+     * 获取积分变动记录
+     * @param userPoint
+     * @return
+     */
+    @PostMapping("/getUserPointList")
+    public R<List<UserPoint>> getUserPointList(@RequestBody UserPoint userPoint){
+        LambdaQueryWrapper<UserPoint> queryWrapper = new LambdaQueryWrapper<>();
+        if(null != userPoint.getType()){
+            queryWrapper.eq(UserPoint::getType, userPoint.getType());
+        }
+        if(null != userPoint.getObjectId()){
+            queryWrapper.eq(UserPoint::getObjectId, userPoint.getObjectId());
+        }
+        if(null != userPoint.getAppUserId()){
+            queryWrapper.eq(UserPoint::getAppUserId, userPoint.getAppUserId());
+        }
+        List<UserPoint> list = userPointService.list(queryWrapper);
+        return R.ok(list);
+    }
 }
 
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserPointService.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserPointService.java
index 149ea11..de8d44b 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserPointService.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/UserPointService.java
@@ -9,6 +9,7 @@
 import com.ruoyi.account.vo.UserPointDetailVO;
 import com.ruoyi.account.vo.UserPointStatistics;
 import com.ruoyi.account.vo.UserPointVO;
+import com.ruoyi.common.core.domain.R;
 import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
@@ -30,7 +31,7 @@
 
     List<UserPointDetailVO> getUserPointDetail(Long userId, LocalDateTime startTime, LocalDateTime endTime, Integer type);
 
-    void transferPoint(BigDecimal point, String phone);
+    R transferPoint(Integer point, String phone);
 
     UserPointStatistics getStatistics(UserPoint userPoint);
 
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/VipSettingService.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/VipSettingService.java
index d6831ce..c937b2f 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/VipSettingService.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/VipSettingService.java
@@ -8,5 +8,4 @@
 
     VipSetting getVipSettingByUserId(Long appUserId);
 
-    void downUsers();
 }
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 9d47a7a..c584e72 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
@@ -3,18 +3,13 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.account.api.model.AppUserShop;
-import com.ruoyi.account.api.model.UserChangeLog;
-import com.ruoyi.account.api.model.UserPoint;
+import com.ruoyi.account.api.model.*;
 import com.ruoyi.account.mapper.AppUserMapper;
-import com.ruoyi.account.api.model.AppUser;
-import com.ruoyi.account.service.AppUserService;
-import com.ruoyi.account.service.AppUserShopService;
-import com.ruoyi.account.service.UserChangeLogService;
-import com.ruoyi.account.service.UserPointService;
+import com.ruoyi.account.service.*;
 import com.ruoyi.account.util.SMSUtil;
 import com.ruoyi.account.util.tencentMap.TencentMapUtil;
 import com.ruoyi.account.util.weChat.EnvVersion;
@@ -25,14 +20,8 @@
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.common.security.service.TokenService;
-import com.ruoyi.other.api.domain.PointSetting;
-import com.ruoyi.other.api.domain.Region;
-import com.ruoyi.other.api.domain.Shop;
-import com.ruoyi.other.api.domain.VipSetting;
-import com.ruoyi.other.api.feignClient.PointSettingClient;
-import com.ruoyi.other.api.feignClient.RegionClient;
-import com.ruoyi.other.api.feignClient.ShopClient;
-import com.ruoyi.other.api.feignClient.VipSettingClient;
+import com.ruoyi.other.api.domain.*;
+import com.ruoyi.other.api.feignClient.*;
 import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.api.feignClient.SysUserClient;
 import com.ruoyi.system.api.model.LoginUser;
@@ -105,6 +94,12 @@
 	
 	@Resource
 	private RegionClient regionClient;
+
+	@Resource
+	private CouponInfoClient couponInfoClient;
+
+	@Resource
+	private UserCouponService userCouponService;
 
 
 	/**
@@ -366,6 +361,26 @@
 				userPoint.setCreateTime(LocalDateTime.now());
 				userPoint.setAppUserId(appUser.getId());
 				userPointService.save(userPoint);
+			}
+			//获取优惠券
+			if(0 == old){
+				List<CouponInfo> list = couponInfoClient.getCouponInfoByPersonType(4).getData();
+				for (CouponInfo couponInfo : list) {
+					UserCoupon userCoupon = new UserCoupon();
+					userCoupon.setDelFlag(0);
+					userCoupon.setCreateTime(LocalDateTime.now());
+					userCoupon.setAppUserId(appUser.getId());
+					userCoupon.setCouponId(couponInfo.getId());
+					LocalDateTime start = couponInfo.getPeriodStartTime().atTime(0, 0, 0);
+					LocalDateTime end = couponInfo.getPeriodEndTime().atTime(23, 59, 59);
+					if(couponInfo.getPeriodType() == 2){
+						start = LocalDateTime.now();
+						end = start.plusDays(couponInfo.getPeriodDays());
+					}
+					userCoupon.setStartTime(start);
+					userCoupon.setEndTime(end);
+					userCouponService.save(userCoupon);
+				}
 			}
 			//变更等级
 			vipUpgrade(appUser.getId());
@@ -716,14 +731,14 @@
 		List<AppUser> list = this.list(new LambdaQueryWrapper<AppUser>().eq(AppUser::getVipId, 1).eq(AppUser::getDelFlag, 0).isNotNull(AppUser::getInviteUserId)
 				.eq(AppUser::getStatus, 1).last(" and ADDDATE(create_time,INTERVAL " + vipCancelDay + " DAY) <= now()"));
 		for (AppUser appUser : list) {
-			appUser.setInviteUserId(null);
-			appUser.setShopId(null);
-			this.updateById(appUser);
+			UpdateWrapper<AppUser> updateWrapper = new UpdateWrapper<>();
+			updateWrapper.set("invite_user_id", null).set("shop_id", null).eq("id", appUser.getId());
+			this.update(updateWrapper);
 		}
 		
 		//可更换推广人
-		list = this.list(new LambdaQueryWrapper<AppUser>().eq(AppUser::getVipId, 1).eq(AppUser::getDelFlag, 0).eq(AppUser::getChangePromoter, 0)
-				.isNull(AppUser::getLastShopTime).eq(AppUser::getStatus, 1).last(" and ADDDATE(create_time,INTERVAL " + vipChangeDay + " DAY) <= now()"));
+		list = this.list(new LambdaQueryWrapper<AppUser>().eq(AppUser::getDelFlag, 0).eq(AppUser::getChangePromoter, 0)
+				.eq(AppUser::getStatus, 1).last(" and ADDDATE(ifnull(last_shop_time, create_time),INTERVAL " + vipChangeDay + " DAY) <= now()"));
 		for (AppUser appUser : list) {
 			appUser.setChangePromoter(1);
 			this.updateById(appUser);
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java
index 15e3ad8..8223d51 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/UserPointServiceImpl.java
@@ -15,6 +15,7 @@
 import com.ruoyi.account.vo.UserPointDetailVO;
 import com.ruoyi.account.vo.UserPointStatistics;
 import com.ruoyi.account.vo.UserPointVO;
+import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.PhoneNumberValidator;
 import com.ruoyi.common.security.service.TokenService;
@@ -54,6 +55,11 @@
     private VipSettingService vipSettingService;
     @Resource
     private PointSettingService pointSettingService;
+    @Resource
+    private UserPointService userPointService;
+
+
+
 
     @Override
     public UserPointVO getUserPoint(Long userId) {
@@ -94,9 +100,9 @@
 
     @Override
     @Transactional
-    public void transferPoint(BigDecimal point, String phone) {
+    public R transferPoint(Integer point, String phone) {
         if (!PhoneNumberValidator.isValidChinaPhoneNumber(phone)) {
-            throw new ServiceException("无效的电话号码");
+            return R.fail("无效的电话号码");
         }
 
         LoginUser loginUserApplet = tokenService.getLoginUserApplet();
@@ -104,44 +110,65 @@
 
         VipSetting vipSetting = vipSettingService.getVipSettingByUserId(userid);
         if (vipSetting == null) {
-            throw new ServiceException("VIP 设置未找到");
+            return R.fail("VIP 设置未找到");
         }
         if (vipSetting.getId() == 0 && vipSetting.getVipGiftRole() == 0) {
-            throw new ServiceException("转赠积分权限未开启");
+            return R.fail("转赠积分权限未开启");
         }
 
         AppUser appUser = appUserService.getById(userid);
         if (appUser == null) {
-            throw new ServiceException("用户未找到");
+            return R.fail("用户未找到");
         }
 
         PointSetting pointSetting = pointSettingService.getPointSettingByAppUserId(userid);
         if (pointSetting == null) {
-            throw new ServiceException("积分设置未找到");
+            return R.fail("积分设置未找到");
         }
         // 可转赠积分总数
-        long adjustedPoint = appUser.getAvailablePoint();
-
-        if (point.compareTo(new BigDecimal(adjustedPoint)) > 0) {
-            throw new ServiceException("转赠积分不足");
+        Integer transferablePoint = appUser.getTransferablePoint();
+        if (point > transferablePoint) {
+            return R.fail("转赠积分不足");
         }
 
         AppUser appUserForPhoe = appUserService.getOne(new LambdaQueryWrapper<AppUser>()
                 .eq(AppUser::getPhone, phone));
         if (appUserForPhoe == null) {
-            throw new ServiceException("目标用户未找到");
+            return R.fail("目标用户未找到");
         }
-
-        appUserForPhoe.setLavePoint(appUserForPhoe.getLavePoint() + point.intValue());
-        appUserForPhoe.setTotalPoint(appUserForPhoe.getTotalPoint() + point.intValue());
+        Integer lavePoint1 = appUserForPhoe.getLavePoint();
+        appUserForPhoe.setLavePoint(appUserForPhoe.getLavePoint() + point);
+        appUserForPhoe.setTotalPoint(appUserForPhoe.getTotalPoint() + point);
+        appUserForPhoe.setTransferablePoint(transferablePoint + point);
+        appUserForPhoe.setAvailablePoint(appUserForPhoe.getAvailablePoint() + point);
         appUserService.updateById(appUserForPhoe);
+        //构建积分流水记录
+        UserPoint userPoint = new UserPoint();
+        userPoint.setType(12);
+        userPoint.setHistoricalPoint(lavePoint1);
+        userPoint.setVariablePoint(point);
+        userPoint.setBalance(appUserForPhoe.getLavePoint());
+        userPoint.setCreateTime(LocalDateTime.now());
+        userPoint.setAppUserId(appUserForPhoe.getId());
+        userPointService.save(userPoint);
 
         Integer lavePoint = appUser.getLavePoint();
-        appUser.setLavePoint(lavePoint - point.intValue());
+        appUser.setLavePoint(lavePoint - point);
         Integer totalPoint = appUser.getTotalPoint();
-        appUser.setTotalPoint(totalPoint - point.intValue());
+        appUser.setTotalPoint(totalPoint - point);
+        appUser.setTransferablePoint(appUser.getTransferablePoint() - point);
+        appUser.setAvailablePoint(appUser.getAvailablePoint() - point);
         appUserService.updateById(appUser);
-        log.info("积分转赠完成,用户ID: {}, 新积分: {}", appUserForPhoe.getId(), appUserForPhoe.getLavePoint());
+        //构建积分流水记录
+        userPoint = new UserPoint();
+        userPoint.setType(13);
+        userPoint.setHistoricalPoint(lavePoint);
+        userPoint.setVariablePoint(point);
+        userPoint.setBalance(appUser.getLavePoint());
+        userPoint.setCreateTime(LocalDateTime.now());
+        userPoint.setAppUserId(appUser.getId());
+        userPointService.save(userPoint);
+        return R.ok();
     }
 
 
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/VipSettingServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/VipSettingServiceImpl.java
index cd509c3..0ed0de8 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/VipSettingServiceImpl.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/VipSettingServiceImpl.java
@@ -54,78 +54,5 @@
         return getVipSettingById(appUser.getVipId());
     }
 
-    @Override
-    public void downUsers() {
-                //查出可能需要降级的人员
-        List<Integer> vipIds =  new ArrayList<>();
-        vipIds.add(5);
-        vipIds.add(6);
-        vipIds.add(7);
-        List<AppUser> list = appUserService.lambdaQuery().in(AppUser::getVipId, vipIds).list();
-        VipSetting vipSetting5 = vipSettingClient.getVipSetting(5).getData();
-        VipSetting vipSetting6 = vipSettingClient.getVipSetting(6).getData();
-        VipSetting vipSetting7 = vipSettingClient.getVipSetting(7).getData();
-        LocalDate now = LocalDate.now();
-        //循环判断是否要展示
-        if (list.size()>0){
-            for (AppUser appUser : list){
-                boolean danger = false;
-                if (appUser.getVipId()==5){
-                    extracted(vipSetting5, now,danger);
-                }
-                if (appUser.getVipId()==6){
-                    extracted(vipSetting6, now,danger);
-                }
-                if (appUser.getVipId()==7){
-                    extracted(vipSetting7, now,danger);
-                }
-                if (danger){
-                    appUser.setIsDanger(1);
-                }else {
-                    appUser.setIsDanger(0);
-                }
-            }
-            appUserService.updateBatchById(list);
-        }
-    }
 
-    private void extracted(VipSetting vipSetting5, LocalDate now,boolean danger) {
-
-        if (vipSetting5.getKeepBuyPoint()!=null){
-            //如果消费不为空,查找对应天数的消费积分
-            List<UserPoint> list1 = userPointService.lambdaQuery().eq(UserPoint::getType,1).ge(UserPoint::getCreateTime, now.minusDays(vipSetting5.getKeepBuyDay())).list();
-            //如果消费积分小于保级积分,设置用户降级标志并将降级信息
-            Integer point = 0;
-            for (UserPoint userPoint : list1) {
-                point = point+userPoint.getVariablePoint();
-            }
-            if (point<= vipSetting5.getKeepBuyPoint()){
-                danger = true;
-            }
-        }
-        if (vipSetting5.getKeepSharePoint()!=null){
-            //如果消费不为空,查找对应天数的消费积分
-            List<UserPoint> list1 = userPointService.lambdaQuery().eq(UserPoint::getType,2).ge(UserPoint::getCreateTime, now.minusDays(vipSetting5.getKeepBuyDay())).list();
-            //如果消费积分小于保级积分,设置用户降级标志并将降级信息
-            Integer point = 0;
-            for (UserPoint userPoint : list1) {
-                point = point+userPoint.getVariablePoint();
-            }
-            if (point<= vipSetting5.getKeepBuyPoint()){
-                danger = true;
-            }
-        }
-        if (vipSetting5.getKeepShopPoint()!=null){
-            //如果消费不为空,查找对应天数的消费积分
-            List<UserPoint> list1 = userPointService.lambdaQuery().eq(UserPoint::getType,5).ge(UserPoint::getCreateTime, now.minusDays(vipSetting5.getKeepBuyDay())).list();
-            //如果消费积分小于保级积分,设置用户降级标志并将降级信息
-            Integer point = 0;
-            for (UserPoint userPoint : list1) {
-                point = point+userPoint.getVariablePoint();
-            }
-            if (point<= vipSetting5.getKeepBuyPoint()){
-                danger = true;
-            }
-        }
-    }
 }
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/TaskUtil.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/TaskUtil.java
index 80ab125..8d2d276 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/TaskUtil.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/TaskUtil.java
@@ -17,9 +17,7 @@
     
     @Resource
     private AppUserService appUserService;
-    @Resource
-    private VipSettingService vipSettingService;
-    
+
     
 
 
@@ -30,8 +28,6 @@
     public void sendVipCoupon(){
         //解绑推广人
         appUserService.unbindThePromoter();
-        //降级检测
-        appUserService.demotionDetection();
     }
 
     /**
@@ -40,9 +36,8 @@
     @Scheduled(cron = "0 0 0 * * *")
     public void taskDay(){
         try {
-
-
-            vipSettingService.downUsers();
+            //降级检测
+            appUserService.demotionDetection();
         }catch (Exception e){
             e.printStackTrace();
         }
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/payment/PaymentUtil.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/payment/PaymentUtil.java
index 88ae4d1..3a31f48 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/payment/PaymentUtil.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/payment/PaymentUtil.java
@@ -7,6 +7,7 @@
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
 import com.ruoyi.account.util.payment.model.*;
+import com.ruoyi.common.core.utils.StringUtils;
 import lombok.extern.slf4j.Slf4j;
 
 import java.util.*;
@@ -77,7 +78,7 @@
 		//APPID
 		body.put("q7_AppId", appId);
 		//报备商户号
-		body.put("qa_TradeMerchantNo", tradeMerchantNo);
+		body.put("qa_TradeMerchantNo", StringUtils.isNotEmpty(tradeMerchantNo) ? tradeMerchantNo : "777168500885852");
 		String sign = null;
 		try {
 			sign = sign(body);
@@ -252,13 +253,13 @@
 	
 	
 	
-	public static String sign(JSONObject body) throws Exception{
+	public static String sign(JSONObject body) {
 		Set<Map.Entry<String, Object>> entries = body.entrySet();
 		List<Map.Entry<String, Object>> infoIds = new ArrayList<Map.Entry<String, Object>>(entries);
 		// 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)
 		Collections.sort(infoIds, new Comparator<Map.Entry<String, Object>>() {
 			public int compare(Map.Entry<String, Object> o1, Map.Entry<String, Object> o2) {
-				return (o1.getKey()).toString().compareTo(o2.getKey());
+				return (o1.getKey()).compareTo(o2.getKey());
 			}
 		});
 		// 构造签名键值对的格式
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/TransferPoint.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/TransferPoint.java
new file mode 100644
index 0000000..1c2c58c
--- /dev/null
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/TransferPoint.java
@@ -0,0 +1,19 @@
+package com.ruoyi.account.vo;
+
+import lombok.Data;
+
+/**
+ * @author zhibing.pu
+ * @date 2025/1/6 15:35
+ */
+@Data
+public class TransferPoint {
+    /**
+     * 转增积分
+     */
+    private Integer point;
+    /**
+     * 手机号
+     */
+    private String phone;
+}
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 4827216..ee6149e 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
@@ -56,7 +56,7 @@
         SELECT *
         FROM t_app_user ta
         <where>
-            ta.del_flag = 0
+            ta.del_flag = 0 and ta.status != 3
             <if test="null != appUser.name and '' != appUser.name">
                 and ta.`name` like CONCAT('%',#{appUser.name},'%')
             </if>
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 25fc793..1fe2e7f 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
@@ -16,6 +16,7 @@
 import com.ruoyi.order.model.Order;
 import com.ruoyi.order.service.CommissionService;
 import com.ruoyi.order.service.OrderService;
+import com.ruoyi.order.util.payment.model.RefundCallbackResult;
 import com.ruoyi.order.vo.*;
 import com.ruoyi.other.api.domain.BaseSetting;
 import com.ruoyi.other.api.feignClient.BaseSettingClient;
@@ -25,7 +26,10 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.constraints.NotBlank;
+import java.io.IOException;
+import java.io.PrintWriter;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -318,5 +322,53 @@
     }
 
 
+    /**
+     * 订单取消支付回退
+     * @param refundCallbackResult
+     * @param response
+     * @return
+     */
+    @ResponseBody
+    @GetMapping("/refundPayMoneyCallback")
+    public void refundPayMoneyCallback(RefundCallbackResult refundCallbackResult, HttpServletResponse response){
+        R callback = orderService.refundPayMoneyCallback(refundCallbackResult);
+        if(callback.getCode() == 200){
+            response.setStatus(200);
+            PrintWriter out = null;
+            try {
+                out = response.getWriter();
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+            out.println("success");
+            out.flush();
+            out.close();
+        }
+    }
+
+
+    /**
+     * 取消订单快递费回退
+     * @param refundCallbackResult
+     * @param response
+     */
+    @ResponseBody
+    @GetMapping("/refundExpressPayMoneyCallback")
+    public void refundExpressPayMoneyCallback(RefundCallbackResult refundCallbackResult, HttpServletResponse response){
+        R callback = orderService.refundExpressPayMoneyCallback(refundCallbackResult);
+        if(callback.getCode() == 200){
+            response.setStatus(200);
+            PrintWriter out = null;
+            try {
+                out = response.getWriter();
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+            out.println("success");
+            out.flush();
+            out.close();
+        }
+    }
+
 }
 
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ShoppingCartController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ShoppingCartController.java
index da51645..8083049 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ShoppingCartController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ShoppingCartController.java
@@ -169,7 +169,7 @@
 	@GetMapping("/getGoodsPrice")
 	public R<Price> getGoodsPrice(Long appUserId, Integer goodsId, Integer shopId){
 		AppUser appUser = appUserClient.getAppUserById(appUserId);
-		Price price = shoppingCartService.getPrice(appUser, goodsId, shopId);
+		Price price = shoppingCartService.getPrice(appUser, goodsId, 1, shopId);
 		return R.ok(price);
 	}
 	
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 0d0cb47..7b32545 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
@@ -4,6 +4,7 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.order.model.Order;
+import com.ruoyi.order.util.payment.model.RefundCallbackResult;
 import com.ruoyi.order.vo.*;
 import org.springframework.web.bind.annotation.PathVariable;
 
@@ -56,9 +57,22 @@
      * 返回订单支付金额和回退积分和会员等级
      * @param order
      */
-    void refundPayMoney(Order order);
-    
-    
+    R refundPayMoney(Order order);
+
+    /**
+     * 取消订单后回调处理
+     * @return
+     */
+    R refundPayMoneyCallback(RefundCallbackResult refundCallbackResult);
+
+
+    /**
+     * 取消订单快递费回退
+     * @return
+     */
+    R refundExpressPayMoneyCallback(RefundCallbackResult refundCallbackResult);
+
+
     /**
      * 收货操作
      * @param orderId
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ShoppingCartService.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ShoppingCartService.java
index 716921a..5fdd626 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ShoppingCartService.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/ShoppingCartService.java
@@ -66,7 +66,7 @@
 	R shoppingCartMaterialFlowPaymentCallback(UniPayCallbackResult uniPayCallbackResult);
 	
 
-	Price getPrice(AppUser appUser, Integer goodsId, Integer shopId);
+	Price getPrice(AppUser appUser, Integer goodsId, Integer type, Integer shopId);
 	
 	
 	/**
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 3926014..8cb3aca 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
@@ -143,61 +143,64 @@
                 bdmdsj_point += orderGood.getBoundShopSuperiorsPoints();
             }
             //直推上级
-            AppUser inviteUser = appUserClient.getAppUserById(appUser.getInviteUserId());
-            if(null != inviteUser){
-                BigDecimal balance = inviteUser.getBalance();
-                Integer lavePoint = inviteUser.getLavePoint();
-                if(ztsj_price.compareTo(BigDecimal.ZERO) > 0){
-                    inviteUser.setTotalDistributionAmount(inviteUser.getTotalDistributionAmount().add(ztsj_price).setScale(2, BigDecimal.ROUND_HALF_EVEN));
-                    inviteUser.setBalance(inviteUser.getBalance().add(ztsj_price).setScale(2, BigDecimal.ROUND_HALF_EVEN));
-                    inviteUser.setWithdrawableAmount(inviteUser.getWithdrawableAmount().add(ztsj_price).setScale(2, BigDecimal.ROUND_HALF_EVEN));
-                }
-                if(ztsj_point > 0){
-                    PointSetting pointSetting = pointSettingClient.getPointSetting(appUser.getVipId()).getData();
-                    int earnPoint1 = 0;
-                    //计算可用积分比例
-                    if(null != pointSetting && 1 == pointSetting.getSharePointOpen()){
-                        earnPoint1 = new BigDecimal(ztsj_point).multiply(pointSetting.getSharePoint().divide(new BigDecimal(100))).intValue();
+            if(null != appUser.getInviteUserId()){
+                AppUser inviteUser = appUserClient.getAppUserById(appUser.getInviteUserId());
+                if(null != inviteUser){
+                    BigDecimal balance = inviteUser.getBalance();
+                    Integer lavePoint = inviteUser.getLavePoint();
+                    if(ztsj_price.compareTo(BigDecimal.ZERO) > 0){
+                        inviteUser.setTotalDistributionAmount(inviteUser.getTotalDistributionAmount().add(ztsj_price).setScale(2, BigDecimal.ROUND_HALF_EVEN));
+                        inviteUser.setBalance(inviteUser.getBalance().add(ztsj_price).setScale(2, BigDecimal.ROUND_HALF_EVEN));
+                        inviteUser.setWithdrawableAmount(inviteUser.getWithdrawableAmount().add(ztsj_price).setScale(2, BigDecimal.ROUND_HALF_EVEN));
                     }
-                    inviteUser.setSharePoint(inviteUser.getSharePoint() + ztsj_point);
-                    inviteUser.setLavePoint(inviteUser.getLavePoint() + ztsj_point);
-                    inviteUser.setAvailablePoint(inviteUser.getAvailablePoint() + earnPoint1);
-                    inviteUser.setTotalAvailablePoint(inviteUser.getTotalAvailablePoint() + earnPoint1);
-                    if(null != pointSetting && 1 == pointSetting.getSharePointGift()){
-                        inviteUser.setTransferablePoint(inviteUser.getTransferablePoint() + earnPoint1);
+                    if(ztsj_point > 0){
+                        PointSetting pointSetting = pointSettingClient.getPointSetting(appUser.getVipId()).getData();
+                        int earnPoint1 = 0;
+                        //计算可用积分比例
+                        if(null != pointSetting && 1 == pointSetting.getSharePointOpen()){
+                            earnPoint1 = new BigDecimal(ztsj_point).multiply(pointSetting.getSharePoint().divide(new BigDecimal(100))).intValue();
+                        }
+                        inviteUser.setSharePoint(inviteUser.getSharePoint() + ztsj_point);
+                        inviteUser.setLavePoint(inviteUser.getLavePoint() + ztsj_point);
+                        inviteUser.setAvailablePoint(inviteUser.getAvailablePoint() + earnPoint1);
+                        inviteUser.setTotalAvailablePoint(inviteUser.getTotalAvailablePoint() + earnPoint1);
+                        if(null != pointSetting && 1 == pointSetting.getSharePointGift()){
+                            inviteUser.setTransferablePoint(inviteUser.getTransferablePoint() + earnPoint1);
+                        }
+                        inviteUser.setTotalPoint(inviteUser.getTotalPoint() + ztsj_point);
                     }
-                    inviteUser.setTotalPoint(inviteUser.getTotalPoint() + ztsj_point);
-                }
-                appUserClient.editAppUserById(inviteUser);
-                //添加明细记录
-                if(!inviteUser.getBalance().equals(balance)){
-                    BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord();
-                    balanceChangeRecord.setAppUserId(inviteUser.getId());
-                    balanceChangeRecord.setOrderId(order.getId());
-                    balanceChangeRecord.setChangeType(4);
-                    balanceChangeRecord.setBeforeAmount(balance);
-                    balanceChangeRecord.setChangeAmount(ztsj_price);
-                    balanceChangeRecord.setAfterAmount(inviteUser.getBalance());
-                    balanceChangeRecord.setDelFlag(0);
-                    balanceChangeRecord.setCreateTime(LocalDateTime.now());
-                    balanceChangeRecordClient.saveBalanceChangeRecord(balanceChangeRecord);
-                }
-                //添加积分明细
-                if(!inviteUser.getLavePoint().equals(lavePoint)){
-                    UserPoint userPoint = new UserPoint();
-                    userPoint.setType(2);
-                    userPoint.setHistoricalPoint(lavePoint);
-                    userPoint.setVariablePoint(ztsj_point);
-                    userPoint.setBalance(inviteUser.getLavePoint());
-                    userPoint.setCreateTime(LocalDateTime.now());
-                    userPoint.setAppUserId(inviteUser.getId());
-                    userPoint.setObjectId(order.getId());
-                    userPoint.setExtention(order.getOrderNumber());
-                    userPointClient.saveUserPoint(userPoint);
-                    //变更等级
-                    appUserClient.vipUpgrade(inviteUser.getId());
+                    appUserClient.editAppUserById(inviteUser);
+                    //添加明细记录
+                    if(!inviteUser.getBalance().equals(balance)){
+                        BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord();
+                        balanceChangeRecord.setAppUserId(inviteUser.getId());
+                        balanceChangeRecord.setOrderId(order.getId());
+                        balanceChangeRecord.setChangeType(4);
+                        balanceChangeRecord.setBeforeAmount(balance);
+                        balanceChangeRecord.setChangeAmount(ztsj_price);
+                        balanceChangeRecord.setAfterAmount(inviteUser.getBalance());
+                        balanceChangeRecord.setDelFlag(0);
+                        balanceChangeRecord.setCreateTime(LocalDateTime.now());
+                        balanceChangeRecordClient.saveBalanceChangeRecord(balanceChangeRecord);
+                    }
+                    //添加积分明细
+                    if(!inviteUser.getLavePoint().equals(lavePoint)){
+                        UserPoint userPoint = new UserPoint();
+                        userPoint.setType(2);
+                        userPoint.setHistoricalPoint(lavePoint);
+                        userPoint.setVariablePoint(ztsj_point);
+                        userPoint.setBalance(inviteUser.getLavePoint());
+                        userPoint.setCreateTime(LocalDateTime.now());
+                        userPoint.setAppUserId(inviteUser.getId());
+                        userPoint.setObjectId(order.getId());
+                        userPoint.setExtention(order.getOrderNumber());
+                        userPointClient.saveUserPoint(userPoint);
+                        //变更等级
+                        appUserClient.vipUpgrade(inviteUser.getId());
+                    }
                 }
             }
+
             //直帮上级
             AppUser superiorLeader = appUserClient.getSuperiorLeader(appUser.getId()).getData();
             if(null != superiorLeader){
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 e3bc81d..3a68b76 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
@@ -20,10 +20,15 @@
 import com.ruoyi.order.model.Order;
 import com.ruoyi.order.model.OrderBalancePayment;
 import com.ruoyi.order.model.OrderGood;
+import com.ruoyi.order.model.RefundPass;
 import com.ruoyi.order.service.CommissionService;
 import com.ruoyi.order.service.OrderBalancePaymentService;
 import com.ruoyi.order.service.OrderService;
+import com.ruoyi.order.service.RefundPassService;
 import com.ruoyi.order.util.ExpressDeliveryUtil;
+import com.ruoyi.order.util.payment.PaymentUtil;
+import com.ruoyi.order.util.payment.model.RefundCallbackResult;
+import com.ruoyi.order.util.payment.model.RefundResult;
 import com.ruoyi.order.util.vo.QueryKD100Vo;
 import com.ruoyi.order.vo.*;
 import com.ruoyi.other.api.domain.*;
@@ -89,6 +94,9 @@
     
     @Resource
     private GoodsClient goodsClient;
+
+    @Resource
+    private RefundPassService refundPassService;
     
     
 
@@ -339,9 +347,11 @@
             return R.fail("无效的操作");
         }
         order.setOrderStatus(5);
-        this.updateById(order);
-        refundPayMoney(order);
-        return R.ok();
+        R r = refundPayMoney(order);
+        if(200 == r.getCode()){
+            this.updateById(order);
+        }
+        return r;
     }
     
     
@@ -349,13 +359,20 @@
      * 返回订单支付金额和回退积分和会员等级
      * @param order
      */
-    public void 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){
             //微信退款
+            RefundResult refund = PaymentUtil.refund(order.getOrderNumber(), "R" + order.getOrderNumber(), paymentAmount.doubleValue(), "/order/order/refundPayMoneyCallback");
+            if("100".equals(refund.getRa_Status())){
+                order.setRefundStatus(1);
+                return R.ok();
+            }else{
+                return R.fail(refund.getRc_CodeMsg());
+            }
         }
         if(2 == payMethod){
             //余额退款
@@ -367,6 +384,13 @@
             }
             appUser.setBalance(balance.add(paymentAmount).setScale(2, RoundingMode.HALF_EVEN));
             appUser.setShopAmount(appUser.getShopAmount().subtract(paymentAmount).setScale(2, RoundingMode.HALF_EVEN));
+            //查询最后一次的消费订单
+            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(2, 3, 4, 8)).ne(Order::getId, order.getId()).last(" order by create_time desc limit 0, 1"));
+            if(null != order1){
+                appUser.setLastShopTime(order1.getCreateTime());
+            }else{
+                appUser.setLastShopTime(LocalDateTime.MIN);
+            }
         
             //构建账户余额流水明细
             BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord();
@@ -380,16 +404,19 @@
             balanceChangeRecord.setCreateTime(LocalDateTime.now());
             balanceChangeRecordClient.saveBalanceChangeRecord(balanceChangeRecord);
         }
-        Integer lavePoint = appUser.getLavePoint();
         if(3 == payMethod){
-            //积分退款
-            appUser.setLavePoint(appUser.getLavePoint() + order.getPoint());
-        
             //开始运费退款,积分支付,运费是单独进行支付的,所以需要单独退款
             if(null != order.getExpressAmount() && BigDecimal.ZERO.compareTo(order.getExpressAmount()) < 0){
                 BigDecimal expressAmount = order.getExpressAmount();
                 if(1 == order.getExpressPayMethod()){
                     //微信退款
+                    RefundResult refund = PaymentUtil.refund(order.getOrderNumber(), "R" + order.getOrderNumber(), expressAmount.doubleValue(), "/order/order/refundExpressPayMoneyCallback");
+                    if("100".equals(refund.getRa_Status())){
+                        order.setRefundStatus(1);
+                        return R.ok();
+                    }else{
+                        return R.fail(refund.getRc_CodeMsg());
+                    }
                 }
                 if(2 == order.getExpressPayMethod()){
                     //余额退款
@@ -411,38 +438,209 @@
                     balanceChangeRecordClient.saveBalanceChangeRecord(balanceChangeRecord);
                 }
             }
+
+            Integer lavePoint = appUser.getLavePoint();
+            //积分退款
+            appUser.setLavePoint(appUser.getLavePoint() + order.getPoint());
+            appUser.setAvailablePoint(appUser.getAvailablePoint() + order.getPoint());
+            UserPoint userPoint1 = new UserPoint();
+            userPoint1.setType(11);
+            userPoint1.setObjectId(order.getId());
+            List<UserPoint> data = userPointClient.getUserPointList(userPoint1).getData();
+            Integer transferablePoint = order.getPoint();
+            if(data.size() > 0){
+                UserPoint userPoint = data.get(0);
+                transferablePoint = Integer.valueOf(userPoint.getExtention());
+            }
+            appUser.setTransferablePoint(appUser.getTransferablePoint() + transferablePoint);
+
+            //构建积分流水明细
+            UserPoint userPoint = new UserPoint();
+            userPoint.setType(11);
+            userPoint.setHistoricalPoint(lavePoint);
+            userPoint.setVariablePoint(order.getPoint());
+            userPoint.setBalance(appUser.getLavePoint());
+            userPoint.setCreateTime(LocalDateTime.now());
+            userPoint.setAppUserId(order.getAppUserId());
+            userPoint.setObjectId(order.getId());
+            userPointClient.saveUserPoint(userPoint);
         }
         //退回获得的消费积分
         //需要先检查会员等级时候回回退,使用回退后的会员等级查询配置
+        Integer lavePoint = appUser.getLavePoint();
         Integer getPoint = order.getGetPoint();
         boolean vipDemotion = vipDemotion(appUser.getShopPoint() - getPoint, appUser.getVipId());
         PointSetting pointSetting = pointSettingClient.getPointSetting(vipDemotion ? appUser.getVipId() - 1 : appUser.getVipId()).getData();
-        int earnPoint1 = getPoint;
+        int earnPoint1 = 0;
         if(null != pointSetting && 1 == pointSetting.getBuyPointOpen()){
             earnPoint1 = new BigDecimal(getPoint).divide(pointSetting.getBuyPoint().divide(new BigDecimal(100))).intValue();
         }
-        appUser.setLavePoint(lavePoint - getPoint);
-        appUser.setShopPoint(appUser.getShopPoint() - earnPoint1);
-        appUser.setTotalPoint(appUser.getTotalPoint() - earnPoint1);
+        appUser.setShopPoint(appUser.getShopPoint() - getPoint);
+        appUser.setLavePoint(appUser.getLavePoint() - getPoint);
+        appUser.setAvailablePoint(appUser.getAvailablePoint() - earnPoint1);
+        appUser.setTotalAvailablePoint(appUser.getTotalAvailablePoint() - earnPoint1);
+        if(null != pointSetting && 1 == pointSetting.getBuyPointGift()){
+            appUser.setTransferablePoint(appUser.getTransferablePoint() - earnPoint1);
+        }
+        appUser.setTotalPoint(appUser.getTotalPoint() - getPoint);
         if(vipDemotion){
             appUser.setVipId(appUser.getVipId() - 1);
         }
+
         //构建积分流水明细
         UserPoint userPoint = new UserPoint();
-        userPoint.setType(11);
+        userPoint.setType(1);
         userPoint.setHistoricalPoint(lavePoint);
-        Integer point = appUser.getLavePoint() - lavePoint;
-        userPoint.setVariablePoint(point >= 0 ? point : point * -1);
+        userPoint.setVariablePoint(getPoint);
         userPoint.setBalance(appUser.getLavePoint());
         userPoint.setCreateTime(LocalDateTime.now());
         userPoint.setAppUserId(order.getAppUserId());
         userPoint.setObjectId(order.getId());
         userPointClient.saveUserPoint(userPoint);
         appUserClient.editAppUserById(appUser);
+
+        order.setRefundStatus(2);
+        order.setRefundTime(LocalDateTime.now());
+        return R.ok();
     }
-    
-    
-    
+
+
+    /**
+     * 取消订单后回调处理
+     * @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){
+            return R.ok();
+        }
+        order.setRefundCode(refundCallbackResult.getR5_RefundTrxNo());
+        order.setRefundStatus(2);
+        order.setRefundTime(LocalDateTime.now());
+        this.updateById(order);
+
+        //退回获得的消费积分
+        //需要先检查会员等级时候回回退,使用回退后的会员等级查询配置
+        AppUser appUser = appUserClient.getAppUserById(order.getAppUserId());
+        Integer lavePoint = appUser.getLavePoint();
+        Integer getPoint = order.getGetPoint();
+        boolean vipDemotion = vipDemotion(appUser.getShopPoint() - getPoint, appUser.getVipId());
+        PointSetting pointSetting = pointSettingClient.getPointSetting(vipDemotion ? appUser.getVipId() - 1 : appUser.getVipId()).getData();
+        int earnPoint1 = 0;
+        if(null != pointSetting && 1 == pointSetting.getBuyPointOpen()){
+            earnPoint1 = new BigDecimal(getPoint).divide(pointSetting.getBuyPoint().divide(new BigDecimal(100))).intValue();
+        }
+        appUser.setShopPoint(appUser.getShopPoint() - getPoint);
+        appUser.setLavePoint(appUser.getLavePoint() - getPoint);
+        appUser.setAvailablePoint(appUser.getAvailablePoint() - earnPoint1);
+        appUser.setTotalAvailablePoint(appUser.getTotalAvailablePoint() - earnPoint1);
+        if(null != pointSetting && 1 == pointSetting.getBuyPointGift()){
+            appUser.setTransferablePoint(appUser.getTransferablePoint() - earnPoint1);
+        }
+        appUser.setTotalPoint(appUser.getTotalPoint() - getPoint);
+        if(vipDemotion){
+            appUser.setVipId(appUser.getVipId() - 1);
+        }
+
+        //构建积分流水明细
+        UserPoint userPoint = new UserPoint();
+        userPoint.setType(1);
+        userPoint.setHistoricalPoint(lavePoint);
+        userPoint.setVariablePoint(getPoint);
+        userPoint.setBalance(appUser.getLavePoint());
+        userPoint.setCreateTime(LocalDateTime.now());
+        userPoint.setAppUserId(order.getAppUserId());
+        userPoint.setObjectId(order.getId());
+        userPointClient.saveUserPoint(userPoint);
+        appUserClient.editAppUserById(appUser);
+        return R.ok();
+    }
+
+
+    /**
+     * 取消订单快递费回退
+     * @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){
+            return R.ok();
+        }
+        order.setRefundCode(refundCallbackResult.getR5_RefundTrxNo());
+        order.setRefundStatus(2);
+        order.setRefundTime(LocalDateTime.now());
+        this.updateById(order);
+
+        AppUser appUser = appUserClient.getAppUserById(order.getAppUserId());
+        Integer lavePoint = appUser.getLavePoint();
+        //积分退款
+        appUser.setLavePoint(appUser.getLavePoint() + order.getPoint());
+        appUser.setAvailablePoint(appUser.getAvailablePoint() + order.getPoint());
+        UserPoint userPoint1 = new UserPoint();
+        userPoint1.setType(11);
+        userPoint1.setObjectId(order.getId());
+        List<UserPoint> data = userPointClient.getUserPointList(userPoint1).getData();
+        Integer transferablePoint = order.getPoint();
+        if(data.size() > 0){
+            UserPoint userPoint = data.get(0);
+            transferablePoint = Integer.valueOf(userPoint.getExtention());
+        }
+        appUser.setTransferablePoint(appUser.getTransferablePoint() + transferablePoint);
+
+        //构建积分流水明细
+        UserPoint userPoint = new UserPoint();
+        userPoint.setType(11);
+        userPoint.setHistoricalPoint(lavePoint);
+        userPoint.setVariablePoint(order.getPoint());
+        userPoint.setBalance(appUser.getLavePoint());
+        userPoint.setCreateTime(LocalDateTime.now());
+        userPoint.setAppUserId(order.getAppUserId());
+        userPoint.setObjectId(order.getId());
+        userPointClient.saveUserPoint(userPoint);
+
+        //退回获得的消费积分
+        //需要先检查会员等级时候回回退,使用回退后的会员等级查询配置
+        lavePoint = appUser.getLavePoint();
+        Integer getPoint = order.getGetPoint();
+        boolean vipDemotion = vipDemotion(appUser.getShopPoint() - getPoint, appUser.getVipId());
+        PointSetting pointSetting = pointSettingClient.getPointSetting(vipDemotion ? appUser.getVipId() - 1 : appUser.getVipId()).getData();
+        int earnPoint1 = 0;
+        if(null != pointSetting && 1 == pointSetting.getBuyPointOpen()){
+            earnPoint1 = new BigDecimal(getPoint).divide(pointSetting.getBuyPoint().divide(new BigDecimal(100))).intValue();
+        }
+        appUser.setShopPoint(appUser.getShopPoint() - getPoint);
+        appUser.setLavePoint(appUser.getLavePoint() - getPoint);
+        appUser.setAvailablePoint(appUser.getAvailablePoint() - earnPoint1);
+        appUser.setTotalAvailablePoint(appUser.getTotalAvailablePoint() - earnPoint1);
+        if(null != pointSetting && 1 == pointSetting.getBuyPointGift()){
+            appUser.setTransferablePoint(appUser.getTransferablePoint() - earnPoint1);
+        }
+        appUser.setTotalPoint(appUser.getTotalPoint() - getPoint);
+        if(vipDemotion){
+            appUser.setVipId(appUser.getVipId() - 1);
+        }
+
+        //构建积分流水明细
+        userPoint = new UserPoint();
+        userPoint.setType(1);
+        userPoint.setHistoricalPoint(lavePoint);
+        userPoint.setVariablePoint(getPoint);
+        userPoint.setBalance(appUser.getLavePoint());
+        userPoint.setCreateTime(LocalDateTime.now());
+        userPoint.setAppUserId(order.getAppUserId());
+        userPoint.setObjectId(order.getId());
+        userPointClient.saveUserPoint(userPoint);
+        appUserClient.editAppUserById(appUser);
+
+        order.setRefundStatus(2);
+        order.setRefundTime(LocalDateTime.now());
+        return null;
+    }
+
     /**
      * 会员降级检测
      */
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/RefundPassServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/RefundPassServiceImpl.java
index 199eaf5..4251ede 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/RefundPassServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/RefundPassServiceImpl.java
@@ -161,15 +161,18 @@
 			refundPass.setStatus(2);
 		}
 		refundPass.setPassRemark(passRemark);
-		this.updateById(refundPass);
 		//仅退款的售后需要将支付金额原路返回,然后再扣减支付获得的积分
 		if(refundPass.getRefundMethod() == 2 && 2 == status){
 			Order order = orderService.getById(refundPass.getOrderId());
 			order.setOrderStatus(6);
-			orderService.updateById(order);
 			//返回订单支付金额和回退积分和会员等级
-			orderService.refundPayMoney(order);
+			R r = orderService.refundPayMoney(order);
+			if(200 != r.getCode()){
+				return r;
+			}
+			orderService.updateById(order);
 		}
+		this.updateById(refundPass);
 		return R.ok();
 	}
 	
@@ -189,13 +192,16 @@
 			return R.fail("操作失败");
 		}
 		refundPass.setStatus(2);
-		this.updateById(refundPass);
 		//仅退款的售后需要将支付金额原路返回,然后再扣减支付获得的积分
 		Order order = orderService.getById(refundPass.getOrderId());
 		order.setOrderStatus(6);
-		orderService.updateById(order);
 		//返回订单支付金额和回退积分和会员等级
-		orderService.refundPayMoney(order);
+		R r = orderService.refundPayMoney(order);
+		if(200 != r.getCode()){
+			return r;
+		}
+		this.updateById(refundPass);
+		orderService.updateById(order);
 		return R.ok();
 	}
 	
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java
index 3c5614f..6016597 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/ShoppingCartServiceImpl.java
@@ -142,7 +142,8 @@
 		}
 		List<Integer> goodsIds = data.stream().map(Goods::getId).collect(Collectors.toList());
 		//查询符合商品类型的商品数据
-		List<ShoppingCart> list = this.list(new LambdaQueryWrapper<ShoppingCart>().eq(ShoppingCart::getAppUserId, userid).in(ShoppingCart::getGoodsId, goodsIds));
+		List<ShoppingCart> list = this.list(new LambdaQueryWrapper<ShoppingCart>().eq(ShoppingCart::getAppUserId, userid)
+				.in(ShoppingCart::getGoodsId, goodsIds).eq(ShoppingCart::getStatus, 1));
 		//构建返回数据
 		List<MyShoppingCartVo> page = buildDetail(appUser, shopId, list, null);
 		return page;
@@ -156,7 +157,7 @@
 	 * @param shopId
 	 * @return
 	 */
-	public Price getPrice(AppUser appUser, Integer goodsId, Integer shopId){
+	public Price getPrice(AppUser appUser, Integer goodsId, Integer type, Integer shopId){
 		//获取支付价格
 		//秒杀活动>门店特价>地区价格>会员价格
 		//判断是否有秒杀活动
@@ -165,7 +166,8 @@
 		info.setGoodsId(goodsId);
 		info.setVip(appUser.getVipId());
 		GoodsSeckill goodsSeckill = seckillActivityInfoClient.getSeckillActivityInfo(info).getData();
-		if(null == goodsSeckill){
+		//没有秒杀活动或者添加的普通商品则不使用秒杀活动价格
+		if(null == goodsSeckill || type == 1){
 			//没有秒杀价,则判断门店特价
 			GetGoodsBargainPrice goodsBargainPrice = new GetGoodsBargainPrice();
 			goodsBargainPrice.setGoodsId(goodsId);
@@ -288,9 +290,18 @@
 	@Override
 	public Long addGoods(ShoppingCart shoppingCart) {
 		Long userid = tokenService.getLoginUserApplet().getUserid();
-		shoppingCart.setAppUserId(userid);
-		this.save(shoppingCart);
-		return shoppingCart.getId();
+		ShoppingCart one = this.getOne(new LambdaQueryWrapper<ShoppingCart>().eq(ShoppingCart::getAppUserId, userid)
+				.eq(ShoppingCart::getGoodsId, shoppingCart.getGoodsId()).eq(ShoppingCart::getType, shoppingCart.getType()).eq(ShoppingCart::getStatus, 1));
+		if(null != one){
+			one.setNumber(one.getNumber() + shoppingCart.getNumber());
+			this.updateById(one);
+			return one.getId();
+		}else{
+			shoppingCart.setAppUserId(userid);
+			shoppingCart.setStatus(1);
+			this.save(shoppingCart);
+			return shoppingCart.getId();
+		}
 	}
 
 
@@ -336,12 +347,15 @@
 			JSONArray objects = JSON.parseArray(goodsJson);
 			Long id = objects.getJSONObject(0).getLong("id");
 			Integer num1 = objects.getJSONObject(0).getInteger("num");
+			Integer type = objects.getJSONObject(0).getInteger("type");
 			ShoppingCart shoppingCart = new ShoppingCart();
 			shoppingCart.setAppUserId(userid);
 			shoppingCart.setGoodsId(id.intValue());
 			shoppingCart.setNumber(num1);
-			Long shoppingCarId = addGoods(shoppingCart);
-			confirmOrder.setGoodsJson("[{\"id\": " + shoppingCarId + ", \"num\": " + num1 + "}]");
+			shoppingCart.setType(type);
+			shoppingCart.setStatus(0);
+			this.save(shoppingCart);
+			confirmOrder.setGoodsJson("[{\"id\": " + shoppingCart.getId() + ", \"num\": " + num1 + ",\"type\":" + type + "}]");
 		}
 		AppUser appUser = appUserClient.getAppUserById(userid);
 		Integer shopId = confirmOrder.getShopId();
@@ -362,10 +376,16 @@
 		confirmOrderVo.setShopName(shop.getName());
 		//现金支付
 		if(confirmOrder.getPaymentType() == 1){
-			BigDecimal bigDecimal = goodsList.stream().map(MyShoppingCartVo::getCash).reduce(BigDecimal::add).get();
+			BigDecimal bigDecimal = BigDecimal.ZERO;
+			for (MyShoppingCartVo myShoppingCartVo : goodsList) {
+				bigDecimal = bigDecimal.add(myShoppingCartVo.getCash().multiply(new BigDecimal(myShoppingCartVo.getNumber())));
+			}
 			confirmOrderVo.setOrderMoney(bigDecimal);
 		}else{
-			int sum = goodsList.stream().mapToInt(MyShoppingCartVo::getPoint).sum();
+			int sum = 0;
+			for (MyShoppingCartVo myShoppingCartVo : goodsList) {
+				sum += (myShoppingCartVo.getPoint() * myShoppingCartVo.getNumber());
+			}
 			confirmOrderVo.setOrderPoint(sum);
 		}
 		//查询当前是否有订单活动
@@ -474,6 +494,7 @@
 			Goods goods = goodsClient.getGoodsById(shoppingCart.getGoodsId()).getData();
 			MyShoppingCartVo vo = new MyShoppingCartVo();
 			vo.setId(shoppingCart.getId().toString());
+			vo.setType(shoppingCart.getType());
 			vo.setGoodsId(goods.getId());
 			vo.setHomePicture(goods.getHomePagePicture());
 			vo.setName(goods.getName());
@@ -488,7 +509,7 @@
 				}
 			}
 			//获取支付价格
-			Price price = getPrice(appUser, shoppingCart.getGoodsId(), shopId);
+			Price price = getPrice(appUser, shoppingCart.getGoodsId(), shoppingCart.getType(), shopId);
 			if(null == price){
 				price = new Price();
 				//使用商品的基础价格
@@ -512,6 +533,7 @@
 			//判断当前数量是否已经超出限购数量(需要计算已经购买的数量)
 			if(null == goods.getPurchaseLimit() || -1 == goods.getPurchaseLimit()){
 				vo.setPurchaseLimit(false);
+				vo.setPurchaseLimitNum(-1);
 			}else{
 				List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getAppUserId, appUser.getId()).eq(Order::getDelFlag, 0).in(Order::getOrderStatus, Arrays.asList(4, 8)));
 				List<Long> orderIds = orders.stream().map(Order::getId).collect(Collectors.toList());
@@ -565,7 +587,7 @@
 			//判断当前数量是否已经超出限购数量(需要计算已经购买的数量)
 			Goods goods = goodsClient.getGoodsById(shoppingCart.getGoodsId()).getData();
 			if(null != goods.getPurchaseLimit() && -1 != goods.getPurchaseLimit()){
-				List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getAppUserId, appUser.getId()).eq(Order::getDelFlag, 0).in(Order::getOrderStatus, Arrays.asList(4, 8)));
+				List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().eq(Order::getAppUserId, appUser.getId()).eq(Order::getDelFlag, 0).notIn(Order::getOrderStatus, Arrays.asList(5, 6)));
 				List<Long> orderIds = orders.stream().map(Order::getId).collect(Collectors.toList());
 				int sum = 0;
 				if(orderIds.size() > 0){
@@ -881,15 +903,17 @@
 			//调起微信支付
 			String goodsNames = goodsList.stream().map(MyShoppingCartVo::getName).collect(Collectors.joining("\n"));
 			UniPayResult uniPayResult = PaymentUtil.uniPay(order.getOrderNumber(), paymentMoney.doubleValue(), order.getOrderType() == 1 ? "购买服务商品" : "购买单品商品",
-					goodsNames, "", "/order/shopping-cart/shoppingCartPaymentCallback", appUser.getWxOpenid(), "");
+					goodsNames, "", "/order/shopping-cart/shoppingCartPaymentCallback", appUser.getWxOpenid(), null);
 			if(null == uniPayResult || !"100".equals(uniPayResult.getRa_Code())){
 				return R.fail(null == uniPayResult ? "支付失败" : uniPayResult.getRb_CodeMsg());
 			}
 			String rc_result = uniPayResult.getRc_Result();
+			JSONObject jsonObject = JSON.parseObject(rc_result);
+			jsonObject.put("orderId", order.getId().toString());
 			//将支付数据添加到redis队列中,便于定时任务去校验是否完成支付,没有完成支付支付,15分钟后关闭订单。
 			long second = LocalDateTime.now().plusMinutes(15).toEpochSecond(ZoneOffset.UTC);
 			redisTemplate.opsForZSet().add("OrderPayment", order.getOrderNumber(), second);
-			return R.ok(rc_result);
+			return R.ok(jsonObject.toJSONString());
 		}
 		//账户余额
 		BigDecimal redPacketAmount = BigDecimal.ZERO;
@@ -942,15 +966,17 @@
 					appUser.setTransferablePoint(appUser.getTransferablePoint() + earnPoint1);
 				}
 
-				UserPoint userPoint = new UserPoint();
-				userPoint.setType(1);
-				userPoint.setHistoricalPoint(appUser.getLavePoint() - earnPoint);
-				userPoint.setVariablePoint(earnPoint);
-				userPoint.setBalance(appUser.getLavePoint());
-				userPoint.setCreateTime(LocalDateTime.now());
-				userPoint.setAppUserId(appUser.getId());
-				userPoint.setObjectId(order.getId());
-				userPointClient.saveUserPoint(userPoint);
+				if(earnPoint > 0){
+					UserPoint userPoint = new UserPoint();
+					userPoint.setType(1);
+					userPoint.setHistoricalPoint(appUser.getLavePoint() - earnPoint);
+					userPoint.setVariablePoint(earnPoint);
+					userPoint.setBalance(appUser.getLavePoint());
+					userPoint.setCreateTime(LocalDateTime.now());
+					userPoint.setAppUserId(appUser.getId());
+					userPoint.setObjectId(order.getId());
+					userPointClient.saveUserPoint(userPoint);
+				}
 			}
 			appUser.setShopAmount(appUser.getShopAmount().add(paymentMoney).setScale(2, RoundingMode.HALF_EVEN));
 			appUser.setLastShopTime(LocalDateTime.now());
@@ -984,29 +1010,52 @@
 				if(shoppingCartPayment.getFreightPaymentType() == 1){
 					//调起微信支付
 					UniPayResult uniPayResult = PaymentUtil.uniPay(order.getOrderNumber() + appUser.getId(), expressFee.doubleValue(), order.getOrderType() == 1 ? "购买服务商品快递费" : "购买单品商品快递费",
-							"快递费", "", "/order/shopping-cart/shoppingCartMaterialFlowPaymentCallback", appUser.getWxOpenid(), "");
+							"快递费", "", "/order/shopping-cart/shoppingCartMaterialFlowPaymentCallback", appUser.getWxOpenid(), null);
 					if(null == uniPayResult || !"100".equals(uniPayResult.getRa_Code())){
 						return R.fail(null == uniPayResult ? "支付失败" : uniPayResult.getRb_CodeMsg());
 					}
 					String rc_result = uniPayResult.getRc_Result();
+					JSONObject jsonObject = JSON.parseObject(rc_result);
+					jsonObject.put("orderId", order.getId().toString());
 					//将支付数据添加到redis队列中,便于定时任务去校验是否完成支付,没有完成支付支付,15分钟后关闭订单。
 					long second = LocalDateTime.now().plusMinutes(15).toEpochSecond(ZoneOffset.UTC);
 					redisTemplate.opsForZSet().add("MaterialFlowPayment", order.getOrderNumber() + appUser.getId(), second);
-					return R.ok(rc_result);
+					return R.ok(jsonObject.toJSONString());
 				}
 			}
-			
+
 			Integer lavePoint = appUser.getLavePoint();
+			//扣减订单支付积分
+			appUser.setLavePoint(appUser.getLavePoint() - orderPoint);
+			appUser.setAvailablePoint(appUser.getAvailablePoint() - orderPoint);
+			//可转增积分
+			Integer transferablePoint = appUser.getTransferablePoint();
+			Integer tra = 0;
+			if(transferablePoint > 0){
+				tra = transferablePoint - orderPoint;
+				appUser.setTransferablePoint(tra >= 0 ? tra : 0);
+			}
+			appUser.setTransferablePoint(appUser.getTransferablePoint() - orderPoint);
+
+			//构建积分流水记录
+			UserPoint userPoint = new UserPoint();
+			userPoint.setType(11);
+			userPoint.setHistoricalPoint(lavePoint);
+			userPoint.setVariablePoint(orderPoint);
+			userPoint.setBalance(appUser.getLavePoint());
+			userPoint.setCreateTime(LocalDateTime.now());
+			userPoint.setAppUserId(appUser.getId());
+			userPoint.setObjectId(order.getId());
+			userPoint.setExtention((tra >= 0 ? orderPoint : transferablePoint) + "");
+			userPointClient.saveUserPoint(userPoint);
+
+			lavePoint = appUser.getLavePoint();
 			PointSetting pointSetting = pointSettingClient.getPointSetting(appUser.getVipId()).getData();
 			int earnPoint1 = 0;
 			//计算可用积分比例
 			if(null != pointSetting && 1 == pointSetting.getBuyPointOpen()){
 				earnPoint1 = new BigDecimal(earnPoint).multiply(pointSetting.getBuyPoint().divide(new BigDecimal(100))).intValue();
 			}
-			//扣减订单支付积分
-			appUser.setLavePoint(appUser.getLavePoint() - orderPoint);
-			appUser.setAvailablePoint(appUser.getAvailablePoint() - orderPoint);
-			
 			appUser.setShopPoint(appUser.getShopPoint() + earnPoint);
 			appUser.setLavePoint(appUser.getLavePoint() + earnPoint);
 			appUser.setAvailablePoint(appUser.getAvailablePoint() + earnPoint1);
@@ -1021,16 +1070,17 @@
 			appUserClient.vipUpgrade(appUser.getId());
 
 			//构建积分流水记录
-			UserPoint userPoint = new UserPoint();
-			userPoint.setType(1);
-			userPoint.setHistoricalPoint(lavePoint);
-			Integer point = appUser.getLavePoint() - lavePoint;
-			userPoint.setVariablePoint(point >= 0 ? point : point * -1);
-			userPoint.setBalance(appUser.getLavePoint());
-			userPoint.setCreateTime(LocalDateTime.now());
-			userPoint.setAppUserId(appUser.getId());
-			userPoint.setObjectId(order.getId());
-			userPointClient.saveUserPoint(userPoint);
+			if(earnPoint > 0){
+				userPoint = new UserPoint();
+				userPoint.setType(1);
+				userPoint.setHistoricalPoint(lavePoint);
+				userPoint.setVariablePoint(earnPoint);
+				userPoint.setBalance(appUser.getLavePoint());
+				userPoint.setCreateTime(LocalDateTime.now());
+				userPoint.setAppUserId(appUser.getId());
+				userPoint.setObjectId(order.getId());
+				userPointClient.saveUserPoint(userPoint);
+			}
 			//如果有运费,需要先扣除账户积分,再进行支付。支付成功后修改订单状态,未支付成功则回退积分,删除的订单
 			if(expressFee.compareTo(BigDecimal.ZERO) > 0){
 				if(shoppingCartPayment.getFreightPaymentType() == 2){
@@ -1145,15 +1195,17 @@
 			appUser.setAvailablePoint(appUser.getAvailablePoint() + earnPoint1);
 			appUser.setTotalAvailablePoint(appUser.getTotalAvailablePoint() + earnPoint1);
 			
-			UserPoint userPoint = new UserPoint();
-			userPoint.setType(1);
-			userPoint.setHistoricalPoint(appUser.getLavePoint() - earnPoint);
-			userPoint.setVariablePoint(earnPoint);
-			userPoint.setBalance(appUser.getLavePoint());
-			userPoint.setCreateTime(LocalDateTime.now());
-			userPoint.setAppUserId(appUser.getId());
-			userPoint.setObjectId(order.getId());
-			userPointClient.saveUserPoint(userPoint);
+			if(earnPoint > 0){
+				UserPoint userPoint = new UserPoint();
+				userPoint.setType(1);
+				userPoint.setHistoricalPoint(appUser.getLavePoint() - earnPoint);
+				userPoint.setVariablePoint(earnPoint);
+				userPoint.setBalance(appUser.getLavePoint());
+				userPoint.setCreateTime(LocalDateTime.now());
+				userPoint.setAppUserId(appUser.getId());
+				userPoint.setObjectId(order.getId());
+				userPointClient.saveUserPoint(userPoint);
+			}
 		}
 		appUser.setShopAmount(appUser.getShopAmount().add(paymentMoney).setScale(2, RoundingMode.HALF_EVEN));
 		appUser.setLastShopTime(LocalDateTime.now());
@@ -1192,17 +1244,12 @@
 		Integer earnPoint = order.getGetPoint();
 		AppUser appUser = appUserClient.getAppUserById(order.getAppUserId());
 		Integer lavePoint = appUser.getLavePoint();
-		Integer orderPoint = order.getPoint();
 		PointSetting pointSetting = pointSettingClient.getPointSetting(appUser.getVipId()).getData();
-		int earnPoint1 = earnPoint;
+		int earnPoint1 = 0;
 		//计算可用积分比例
 		if(null != pointSetting && 1 == pointSetting.getBuyPointOpen()){
-			earnPoint1 = new BigDecimal(earnPoint1).multiply(pointSetting.getBuyPoint().divide(new BigDecimal(100))).intValue();
+			earnPoint1 = new BigDecimal(earnPoint).multiply(pointSetting.getBuyPoint().divide(new BigDecimal(100))).intValue();
 		}
-		//扣减订单支付积分
-		appUser.setLavePoint(appUser.getLavePoint() - orderPoint);
-		appUser.setAvailablePoint(appUser.getAvailablePoint() - orderPoint);
-		
 		appUser.setShopPoint(appUser.getShopPoint() + earnPoint);
 		appUser.setLavePoint(appUser.getLavePoint() + earnPoint);
 		appUser.setAvailablePoint(appUser.getAvailablePoint() + earnPoint1);
@@ -1217,13 +1264,13 @@
 		UserPoint userPoint = new UserPoint();
 		userPoint.setType(1);
 		userPoint.setHistoricalPoint(lavePoint);
-		Integer point = appUser.getLavePoint() - lavePoint;
-		userPoint.setVariablePoint(point >= 0 ? point : point * -1);
+		userPoint.setVariablePoint(earnPoint);
 		userPoint.setBalance(appUser.getLavePoint());
 		userPoint.setCreateTime(LocalDateTime.now());
 		userPoint.setAppUserId(appUser.getId());
 		userPoint.setObjectId(order.getId());
 		userPointClient.saveUserPoint(userPoint);
+
 		//修改订支付状态
 		order.setPayStatus(2);
 		//自提
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/payment/PaymentUtil.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/payment/PaymentUtil.java
index 4914a27..9da6f50 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/payment/PaymentUtil.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/payment/PaymentUtil.java
@@ -3,6 +3,7 @@
 import cn.hutool.http.*;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.order.util.payment.model.*;
 import lombok.extern.slf4j.Slf4j;
 
@@ -74,7 +75,7 @@
 		//APPID
 		body.put("q7_AppId", appId);
 		//报备商户号
-		body.put("qa_TradeMerchantNo", tradeMerchantNo);
+		body.put("qa_TradeMerchantNo", StringUtils.isNotEmpty(tradeMerchantNo) ? tradeMerchantNo : "777168500885852");
 		String sign = null;
 		try {
 			sign = sign(body);
@@ -155,7 +156,7 @@
 		//退款金额
 		body.put("p4_RefundAmount", refundAmount);
 		//服务器异步通知地址
-		body.put("p6_NotifyUrl", notifyUrl);
+		body.put("p6_NotifyUrl", callbackUrl + notifyUrl);
 		String sign = null;
 		try {
 			sign = sign(body);
@@ -249,13 +250,13 @@
 	
 	
 	
-	public static String sign(JSONObject body) throws Exception{
+	public static String sign(JSONObject body) {
 		Set<Map.Entry<String, Object>> entries = body.entrySet();
 		List<Map.Entry<String, Object>> infoIds = new ArrayList<Map.Entry<String, Object>>(entries);
 		// 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)
 		Collections.sort(infoIds, new Comparator<Map.Entry<String, Object>>() {
 			public int compare(Map.Entry<String, Object> o1, Map.Entry<String, Object> o2) {
-				return (o1.getKey()).toString().compareTo(o2.getKey());
+				return (o1.getKey()).compareTo(o2.getKey());
 			}
 		});
 		// 构造签名键值对的格式
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/BaseSettingController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/BaseSettingController.java
index 6cc0e7b..2aee854 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/BaseSettingController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/BaseSettingController.java
@@ -56,6 +56,15 @@
 	@ApiOperation(value = "获取基础配置", tags = {"管理后台-基础配置"})
 	public R<BaseSetting> getBaseSetting(@RequestParam("id") Integer id){
 		BaseSetting baseSetting = baseSettingService.getById(id);
+		return R.ok(baseSetting);
+	}
+
+
+	@ResponseBody
+	@GetMapping("/getBaseSetting1")
+	@ApiOperation(value = "获取基础配置", tags = {"小程序-基础配置"})
+	public R<BaseSetting> getBaseSetting1(@RequestParam("id") Integer id){
+		BaseSetting baseSetting = baseSettingService.getById(id);
 		Long userid = tokenService.getLoginUserApplet().getUserid();
 		AppUser appUser = appUserClient.getAppUserById(userid);
 		VipSetting vipSetting = vipSettingService.getById(appUser.getVipId());
@@ -64,6 +73,7 @@
 		return R.ok(baseSetting);
 	}
 
+
 	/**
 	 * 保存设置
 	 */
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 f7de2e1..45f16c3 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
@@ -205,9 +205,14 @@
     }
 
 
-
-
-
+    /**
+     * 根据类型获取有效优惠券列表
+     */
+    @PostMapping("/getCouponInfoByPersonType")
+    public R<List<CouponInfo>> getCouponInfoByPersonType(@RequestParam("personType") Integer personType){
+        List<CouponInfo> list = couponInfoService.list(new LambdaUpdateWrapper<CouponInfo>().eq(CouponInfo::getPersonType, personType).eq(CouponInfo::getDelFlag, 0).eq(CouponInfo::getShelfStatus, 1).last(" and now() between period_start_time and period_end_time"));
+        return R.ok(list);
+    }
 
 
 }
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OrderActivityInfoController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OrderActivityInfoController.java
index 11a35a9..f91120f 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OrderActivityInfoController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/OrderActivityInfoController.java
@@ -48,6 +48,7 @@
 	@PostMapping("/getNowOrderActivityInfo")
 	public R<OrderActivityInfo> getNowOrderActivityInfo(@RequestParam("vip") Integer vip){
 		OrderActivityInfo one = orderActivityInfoService.getOne(new LambdaQueryWrapper<OrderActivityInfo>().eq(OrderActivityInfo::getDelFlag, 0)
+				.eq(OrderActivityInfo::getIsShelf, 1).eq(OrderActivityInfo::getStatus, 1)
 				.last(" and now() between start_time and end_time and FIND_IN_SET(" + vip + ", vip_ids) limit 0, 1"));
 		return R.ok(one);
 	}
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 7fa27cd..ab82e73 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
@@ -183,7 +183,7 @@
     @ApiOperation(value = "广告管理-分享管理-审核列表", tags = {"管理后台"})
     @GetMapping("/manage/auth/list")
     public R<Page<Share>> authmanagelist(String name, Integer addType, @RequestParam Integer pageNum, Integer pageSize) {
-        Page<Share> page = shareService.lambdaQuery().ne(Share::getAuditStatus, 1).like(name != null, Share::getName, name).eq(addType != null, Share::getAddType, addType).page(Page.of(pageNum, pageSize));
+        Page<Share> page = shareService.lambdaQuery().ne(Share::getAuditStatus, 1).like(name != null, Share::getName, name).eq(addType != null, Share::getAddType, addType).orderByAsc(Share::getAuditStatus).page(Page.of(pageNum, pageSize));
         for (Share record : page.getRecords()) {
             if (record.getAddType() == 2) {
                 AppUser appUserById = appUserClient.getAppUserById(Long.valueOf(record.getObjectId()));
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 d1bac18..ff0db3a 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
@@ -283,6 +283,22 @@
         return R.ok();
     }
 
+
+    @PutMapping("/freezingOrThawing")
+    @ApiOperation(value = "门店管理-冻结/解冻门店", tags = {"管理后台-门店管理"})
+    public R freezingOrThawing(@RequestParam("id") Integer id, @RequestParam("status") Integer status){
+        Shop shop = shopService.getById(id);
+        if(shop.getStatus().equals(status)){
+            return R.fail("不能重复操作");
+        }
+        shop.setStatus(status);
+        shopService.updateById(shop);
+        return R.ok();
+    }
+
+
+
+
     @GetMapping("/list")
     @ApiOperation(value = "门店列表", tags = {"管理后台-门店管理"})
     public R<IPage<Shop>> list(@ApiParam("页码") @RequestParam Integer pageNum,@ApiParam("每一页数据大小") Integer pageSize,Shop shop){
@@ -418,7 +434,7 @@
     @ResponseBody
     @PostMapping("/getShopByUserId")
     public R<List<Shop>> getShopByUserId(@RequestParam("id") Long id){
-        List<Shop> list = shopService.lambdaQuery().eq(Shop::getAppUserId, id).list();
+        List<Shop> list = shopService.lambdaQuery().eq(Shop::getAppUserId, id).eq(Shop::getDelFlag,0).list();
         return R.ok(list);
     }
     
@@ -476,12 +492,16 @@
     @ApiOperation(value = "获取可核销门店列表", tags = {"购物车-小程序"})
     public R<List<VerifiableShopVo>> getVerifiableShop(String longitude, String latitude, Integer goodsId){
         String city = TencentMapUtil.inverseGeographicalAnalysis(longitude, latitude, false);
+        if(null == city){
+            city = "510100";
+        }
         city = city.substring(0, 4) + "00";
         LambdaQueryWrapper<Shop> wrapper = new LambdaQueryWrapper<Shop>().eq(Shop::getDelFlag, 0).eq(Shop::getCityCode, city);
         if(null != goodsId){
             Goods goods = goodsService.getById(goodsId);
             if(1 == goods.getType() && 1 == goods.getAppointStore()){
-                List<Integer> collect = goodsShopService.list(new LambdaQueryWrapper<GoodsShop>().eq(GoodsShop::getGoodsId, goods)).stream().map(GoodsShop::getShopId).collect(Collectors.toList());
+                List<Integer> collect = goodsShopService.list(new LambdaQueryWrapper<GoodsShop>().eq(GoodsShop::getGoodsId, goods.getId()))
+                        .stream().map(GoodsShop::getShopId).collect(Collectors.toList());
                 if(collect.size() > 0){
                     wrapper.in(Shop::getId, collect);
                 }
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TechnicianController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TechnicianController.java
index bd8b676..c62ef1b 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TechnicianController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TechnicianController.java
@@ -123,6 +123,9 @@
     @ApiOperation(value = "添加编辑", tags = {"门店-技师列表"})
     public R<Page<Technician>> add(@RequestBody Technician technician) {
         Integer objectId = tokenService.getLoginUser().getSysUser().getObjectId();
+        if (technician.getId()==null){
+            technician.setSubscribeStatus(2);
+        }
         technician.setShopId(objectId);
         technicianService.saveOrUpdate(technician);
         return R.ok();
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/GoodsMapper.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/GoodsMapper.java
index 2a308cd..f1017a1 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/GoodsMapper.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/GoodsMapper.java
@@ -18,6 +18,7 @@
  * @since 2024-11-20
  */
 public interface GoodsMapper extends BaseMapper<Goods> {
+
     List<Goods> selectListByShopId(PageInfo<Goods> pageInfo, @Param("shopId") Integer shopId,@Param("vip") Integer vip);
 
     IPage<Goods> selectManageGoodsList(@Param("page") IPage<Goods> page, @Param("goods") Goods goods);
@@ -30,5 +31,5 @@
      * @param name
      * @return
      */
-    List<GoodsVO> goodsList(PageInfo<GoodsVO> pageInfo, @Param("goodsCategoryId") Integer goodsCategoryId, @Param("name") String name);
+    List<GoodsVO> goodsList(PageInfo<GoodsVO> pageInfo, @Param("goodsCategoryId") Integer goodsCategoryId, @Param("name") String name, @Param("vip") Integer vip);
 }
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/VipSettingService.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/VipSettingService.java
index 2302088..aef5579 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/VipSettingService.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/VipSettingService.java
@@ -15,5 +15,4 @@
 
     VipSetting getVipSettingByUserId(Long userId);
 
-    void downUsers();
 }
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java
index d647b1d..387c300 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -18,6 +19,8 @@
 import com.ruoyi.order.feignClient.RemoteOrderGoodsClient;
 import com.ruoyi.order.vo.Price;
 import com.ruoyi.other.api.domain.*;
+import com.ruoyi.other.api.vo.GetGoodsBargainPrice;
+import com.ruoyi.other.api.vo.GetSeckillActivityInfo;
 import com.ruoyi.other.enums.GoodsStatus;
 import com.ruoyi.other.mapper.GoodsAreaMapper;
 import com.ruoyi.other.mapper.GoodsMapper;
@@ -71,25 +74,39 @@
     private GoodsAreaService goodsAreaService;
     @Resource
     private RemoteOrderGoodsClient remoteOrderGoodsClient;
+    @Resource
+    private SeckillActivityInfoService seckillActivityInfoService;
+    @Resource
+    private GoodsSeckillService goodsSeckillService;
+    @Resource
+    private GoodsBargainPriceService goodsBargainPriceService;
+    @Resource
+    private GoodsBargainPriceDetailService goodsBargainPriceDetailService;
+
+
 
     @Override
     public PageInfo<GoodsVO> goodsList(Goods search) {
         PageInfo<GoodsVO> pageInfo = new PageInfo(search.getPageCurr(), search.getPageSize());
-        List<GoodsVO> list = this.baseMapper.goodsList(pageInfo, search.getGoodsCategoryId(), search.getName());
-        Long userId = null;
+        Integer vipId = 0;
+        String provinceCode = null;
+        String cityCode = null;
+        String districtCode = null;
         String token = SecurityUtils.getToken(ServletUtils.getRequest());
         if(StringUtils.isNotEmpty(token)){
-            userId = tokenService.getLoginUserApplet().getUserid();
+            Long userid = tokenService.getLoginUserApplet().getUserid();
+            AppUser appUser = appUserClient.getAppUserById(userid);
+            vipId = appUser.getVipId();
+            provinceCode = appUser.getProvinceCode();
+            cityCode = appUser.getCityCode();
+            districtCode = appUser.getDistrictCode();
         }
+        List<GoodsVO> list = this.baseMapper.goodsList(pageInfo, search.getGoodsCategoryId(), search.getName(), vipId);
         for (GoodsVO goods : list) {
-            //游客展示基础售价
-            if(null != userId){
-                R<Price> r = remoteOrderGoodsClient.getGoodsPrice(userId, goods.getGoodsId(), null);
-                if (null != r.getData()){
-                    Price price = r.getData();
-                    goods.setSellingPrice(price.getCash());
-                    goods.setIntegral(price.getPoint());
-                }
+            Price price = getPrice(vipId, goods.getGoodsId(), 1, null, provinceCode, cityCode, districtCode);
+            if(null != price){
+                goods.setSellingPrice(price.getCash());
+                goods.setIntegral(price.getPoint());
             }
         }
         return pageInfo.setRecords(list);
@@ -101,30 +118,18 @@
             throw new NullPointerException("商品ID不能为空");
         }
 
-        LoginUser loginUserApplet = tokenService.getLoginUserApplet();
-        AppUser appUser = appUserClient.getAppUserById(loginUserApplet.getUserid());
-        BigDecimal sellingPrice = BigDecimal.ZERO;
-        Integer integral = 0;
-
-        GoodsArea goodsArea = goodsAreaMapper.selectOne(new LambdaQueryWrapper<GoodsArea>()
-                .eq(GoodsArea::getGoodsId, goodsId)
-                .eq(GoodsArea::getVip, appUser.getVipId())
-                .eq(GoodsArea::getProvinceCode, appUser.getProvinceCode())
-                .eq(StringUtils.isNotEmpty(appUser.getCityCode()), GoodsArea::getCityCode, appUser.getCityCode())
-                .eq(StringUtils.isNotEmpty(appUser.getDistrictCode()), GoodsArea::getDistrictsCode, appUser.getDistrictCode()));
-
-        if (Objects.nonNull(goodsArea)){
-            sellingPrice = goodsArea.getSellingPrice();
-            integral = goodsArea.getIntegral();
-        }else {
-            VipSetting vipSetting = vipSettingService.getVipSettingByUserId(loginUserApplet.getUserid());
-            GoodsVip goodsVip = goodsVipService.getOne(new LambdaQueryWrapper<GoodsVip>()
-                    .eq(GoodsVip::getVip, vipSetting.getId())
-                    .eq(GoodsVip::getGoodsId, goodsId));
-            if(null != goodsVip){
-                sellingPrice = goodsVip.getSellingPrice();
-                integral = goodsVip.getIntegral();
-            }
+        Integer vipId = 0;
+        String provinceCode = null;
+        String cityCode = null;
+        String districtCode = null;
+        String token = SecurityUtils.getToken(ServletUtils.getRequest());
+        if(StringUtils.isNotEmpty(token)){
+            Long userid = tokenService.getLoginUserApplet().getUserid();
+            AppUser appUser = appUserClient.getAppUserById(userid);
+            vipId = appUser.getVipId();
+            provinceCode = appUser.getProvinceCode();
+            cityCode = appUser.getCityCode();
+            districtCode = appUser.getDistrictCode();
         }
 
         Goods goods = this.getById(goodsId);
@@ -132,8 +137,11 @@
         BeanUtils.copyBeanProp(goodsVO, goods);
         goodsVO.setGoodsId(goods.getId());
         goodsVO.setGoodsName(goods.getName());
-        goodsVO.setSellingPrice(sellingPrice);
-        goodsVO.setIntegral(integral);
+        Price price = getPrice(vipId, goods.getId(), 1, null, provinceCode, cityCode, districtCode);
+        if(null != price){
+            goodsVO.setSellingPrice(price.getCash());
+            goodsVO.setIntegral(price.getPoint());
+        }
 
         if(goods.getType() == 1){
             if(goods.getAppointStore() == 2){
@@ -161,9 +169,28 @@
 
     @Override
     public List<Goods> getGoodsListByShopId(PageInfo<Goods> pageInfo, Integer shopId) {
-        LoginUser loginUserApplet = tokenService.getLoginUserApplet();
-        VipSetting vipSetting = vipSettingService.getVipSettingByUserId(loginUserApplet.getUserid());
-        return goodsMapper.selectListByShopId(pageInfo, shopId, vipSetting.getId());
+        Integer vipId = 0;
+        String provinceCode = null;
+        String cityCode = null;
+        String districtCode = null;
+        String token = SecurityUtils.getToken(ServletUtils.getRequest());
+        if(StringUtils.isNotEmpty(token)){
+            Long userid = tokenService.getLoginUserApplet().getUserid();
+            AppUser appUser = appUserClient.getAppUserById(userid);
+            vipId = appUser.getVipId();
+            provinceCode = appUser.getProvinceCode();
+            cityCode = appUser.getCityCode();
+            districtCode = appUser.getDistrictCode();
+        }
+        List<Goods> goods = goodsMapper.selectListByShopId(pageInfo, shopId, vipId);
+        for (Goods good : goods) {
+            Price price = getPrice(vipId, good.getId(), 1, shopId, provinceCode, cityCode, districtCode);
+            if(null != price){
+                good.setSellingPrice(price.getCash());
+                good.setIntegral(price.getPoint());
+            }
+        }
+        return goods;
     }
 
     @Override
@@ -376,4 +403,112 @@
         goodsArea1.setGoodsAreaList(goodsAreas);
         return goodsArea1;
     }
+
+
+    /**
+     * 根据商品的价格配置体系获取商品当前的价格
+     * @param vip
+     * @param goodsId
+     * @param type          1普通商品,2秒杀商品
+     * @param shopId
+     * @param provinceCode
+     * @param cityCode
+     * @param districtCode
+     * @return
+     */
+    public Price getPrice(Integer vip, Integer goodsId, Integer shopId, Integer type, String provinceCode, String cityCode, String districtCode){
+        //获取支付价格
+        //秒杀活动>门店特价>地区价格>会员价格
+        //判断是否有秒杀活动
+        Price price = new Price();
+        SeckillActivityInfo one = seckillActivityInfoService.getOne(new LambdaQueryWrapper<SeckillActivityInfo>().eq(SeckillActivityInfo::getGoodId, goodsId)
+                .eq(SeckillActivityInfo::getIsShelves, 1).eq(SeckillActivityInfo::getDelFlag, 0)
+                .last(" and now() between start_time and end_time and FIND_IN_SET(" + vip + ", vip_ids) order by create_time desc limit 0, 1"));
+        GoodsSeckill goodsSeckill = null;
+        if(null != one){
+            goodsSeckill = goodsSeckillService.getOne(new LambdaQueryWrapper<GoodsSeckill>().eq(GoodsSeckill::getSeckillActivityInfoId, one.getId()).eq(GoodsSeckill::getVip, vip));
+        }
+        //没有秒杀活动或者添加的普通商品则不使用秒杀活动价格
+        if(null == goodsSeckill || type == 1){
+            //没有秒杀价,则判断门店特价
+            GoodsBargainPriceDetail bargainPriceDetail = null;
+            if (shopId != null){
+                GoodsBargainPrice priceServiceOne = goodsBargainPriceService.getOne(new LambdaQueryWrapper<GoodsBargainPrice>().eq(GoodsBargainPrice::getGoodsId, goodsId).eq(GoodsBargainPrice::getShopId, shopId)
+                        .eq(GoodsBargainPrice::getDelFlag, 0).eq(GoodsBargainPrice::getAuditStatus, 1).last(" order by create_time desc limit 0, 1"));
+                if(null != priceServiceOne){
+                    bargainPriceDetail = goodsBargainPriceDetailService.getOne(new LambdaQueryWrapper<GoodsBargainPriceDetail>().eq(GoodsBargainPriceDetail::getGoodsBargainPriceId, priceServiceOne.getId()).eq(GoodsBargainPriceDetail::getVip, vip));
+                }
+            }
+            if(null == bargainPriceDetail){
+                //没有门店特价,判断地区价格配置
+                LambdaQueryWrapper<GoodsArea> queryWrapper = new LambdaQueryWrapper<GoodsArea>().eq(GoodsArea::getGoodsId, goodsId).eq(GoodsArea::getVip, vip);
+                if(StringUtils.isNotEmpty(districtCode)){
+                    queryWrapper.eq(GoodsArea::getDistrictsCode, districtCode);
+                }
+                if(StringUtils.isNotEmpty(cityCode)){
+                    queryWrapper.eq(GoodsArea::getCityCode, cityCode);
+                }
+                if(StringUtils.isNotEmpty(provinceCode)){
+                    queryWrapper.eq(GoodsArea::getProvinceCode, provinceCode);
+                }
+                GoodsArea goodsArea = goodsAreaService.getOne(queryWrapper);
+                if(null == goodsArea){
+                    //没有地区价格,则使用会员价格
+                    GoodsVip goodsVip = goodsVipService.getOne(new LambdaQueryWrapper<GoodsVip>().eq(GoodsVip::getGoodsId, goodsId).eq(GoodsVip::getVip, vip));
+                    if(null == goodsVip){
+                        //没有配置价格,直接使用原始基础价格
+                        return null;
+                    }else{
+                        //构建价格数据
+                        if(goodsVip.getCashPayment() == 1 && goodsVip.getPointPayment() == 1){
+                            price.setCash(goodsVip.getSellingPrice());
+                            price.setPoint(goodsVip.getIntegral());
+                        }
+                        if(goodsVip.getCashPayment() == 1 && goodsVip.getPointPayment() == 0){
+                            price.setCash(goodsVip.getSellingPrice());
+                        }
+                        if(goodsVip.getCashPayment() == 0 && goodsVip.getPointPayment() == 1){
+                            price.setPoint(goodsVip.getIntegral());
+                        }
+                        price.setCashPayment(goodsVip.getCashPayment() == 1);
+                        price.setPointPayment(goodsVip.getPointPayment() == 1);
+                    }
+                }else{
+                    //构建价格数据
+                    if(goodsArea.getCashPayment() == 1 && goodsArea.getPointPayment() == 1){
+                        price.setCash(goodsArea.getSellingPrice());
+                        price.setPoint(goodsArea.getIntegral());
+                    }
+                    if(goodsArea.getCashPayment() == 1 && goodsArea.getPointPayment() == 0){
+                        price.setCash(goodsArea.getSellingPrice());
+                    }
+                    if(goodsArea.getCashPayment() == 0 && goodsArea.getPointPayment() == 1){
+                        price.setPoint(goodsArea.getIntegral());
+                    }
+                    price.setCashPayment(goodsArea.getCashPayment() == 1);
+                    price.setPointPayment(goodsArea.getPointPayment() == 1);
+                }
+            }else{
+                price.setCash(bargainPriceDetail.getSellingPrice());
+                price.setPoint(bargainPriceDetail.getIntegral());
+                price.setCashPayment(bargainPriceDetail.getSellingPrice() != null);
+                price.setPointPayment(bargainPriceDetail.getIntegral() != null);
+            }
+        }else{
+            //构建价格数据
+            if(goodsSeckill.getCashPayment() == 1 && goodsSeckill.getPointPayment() == 1){
+                price.setCash(goodsSeckill.getSellingPrice());
+                price.setPoint(goodsSeckill.getIntegral());
+            }
+            if(goodsSeckill.getCashPayment() == 1 && goodsSeckill.getPointPayment() == 0){
+                price.setCash(goodsSeckill.getSellingPrice());
+            }
+            if(goodsSeckill.getCashPayment() == 0 && goodsSeckill.getPointPayment() == 1){
+                price.setPoint(goodsSeckill.getIntegral());
+            }
+            price.setCashPayment(goodsSeckill.getCashPayment() == 1);
+            price.setPointPayment(goodsSeckill.getPointPayment() == 1);
+        }
+        return price;
+    }
 }
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/SeckillActivityInfoServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/SeckillActivityInfoServiceImpl.java
index 7e23225..ce3e341 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/SeckillActivityInfoServiceImpl.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/SeckillActivityInfoServiceImpl.java
@@ -5,7 +5,10 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.account.api.feignClient.AppUserClient;
 import com.ruoyi.account.api.model.AppUser;
+import com.ruoyi.common.core.utils.ServletUtils;
+import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.other.api.domain.*;
 import com.ruoyi.other.mapper.GoodsShopMapper;
 import com.ruoyi.other.mapper.SeckillActivityInfoMapper;
@@ -54,14 +57,20 @@
         LoginUser loginUserApplet = tokenService.getLoginUserApplet();
         AppUser appUser = appUserClient.getAppUserById(loginUserApplet.getUserid());
         goods.setVipId(appUser.getVipId());
-        return seckillActivityInfoMapper.listSeckillActivity(goods);
+        List<SeckillActivityVO> seckillActivityVOS = seckillActivityInfoMapper.listSeckillActivity(goods);
+        return seckillActivityVOS;
     }
 
     @Override
     public SeckillActivityDetailVO detail(Integer seckillActivityId) {
-        Long userid = tokenService.getLoginUserApplet().getUserid();
-        AppUser appUser = appUserClient.getAppUserById(userid);
-        SeckillActivityDetailVO seckillActivityDetailVO = seckillActivityInfoMapper.selectDetail(seckillActivityId, appUser.getVipId());
+        Integer vipId = 0;
+        String token = SecurityUtils.getToken(ServletUtils.getRequest());
+        if(StringUtils.isNotEmpty(token)){
+            Long userid = tokenService.getLoginUserApplet().getUserid();
+            AppUser appUser = appUserClient.getAppUserById(userid);
+            vipId = appUser.getVipId();
+        }
+        SeckillActivityDetailVO seckillActivityDetailVO = seckillActivityInfoMapper.selectDetail(seckillActivityId, vipId);
         Integer goodsId = seckillActivityDetailVO.getGoodsId();
 
         Goods goods = goodsService.getById(goodsId);
@@ -85,7 +94,11 @@
     public void saveSeckillActivityInfo(SeckillActivityInfo seckillActivityInfo) {
         this.baseMapper.insert(seckillActivityInfo);
         List<GoodsSeckill> goodsSeckills = seckillActivityInfo.getGoodsSeckills();
-        goodsSeckills.forEach(goodsSeckill -> goodsSeckill.setSeckillActivityInfoId(seckillActivityInfo.getId()));
+        for (GoodsSeckill goodsSeckill : goodsSeckills) {
+            goodsSeckill.setCashPayment(null == goodsSeckill.getSellingPrice() ? 0 : 1);
+            goodsSeckill.setPointPayment(null == goodsSeckill.getIntegral() ? 0 : 1);
+            goodsSeckill.setSeckillActivityInfoId(seckillActivityInfo.getId());
+        }
         goodsSeckillService.saveBatch(goodsSeckills);
     }
 
@@ -95,7 +108,11 @@
         this.baseMapper.updateById(seckillActivityInfo);
         goodsSeckillService.remove(new LambdaQueryWrapper<GoodsSeckill>().eq(GoodsSeckill::getSeckillActivityInfoId, seckillActivityInfo.getId()));
         List<GoodsSeckill> goodsSeckills = seckillActivityInfo.getGoodsSeckills();
-        goodsSeckills.forEach(goodsSeckill -> goodsSeckill.setSeckillActivityInfoId(seckillActivityInfo.getId()));
+        for (GoodsSeckill goodsSeckill : goodsSeckills) {
+            goodsSeckill.setCashPayment(null == goodsSeckill.getSellingPrice() ? 0 : 1);
+            goodsSeckill.setPointPayment(null == goodsSeckill.getIntegral() ? 0 : 1);
+            goodsSeckill.setSeckillActivityInfoId(seckillActivityInfo.getId());
+        }
         goodsSeckillService.saveBatch(goodsSeckills);
     }
 }
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/VipSettingServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/VipSettingServiceImpl.java
index 99b5c83..b803d76 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/VipSettingServiceImpl.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/VipSettingServiceImpl.java
@@ -35,26 +35,4 @@
         return this.getById(appUser.getVipId());
     }
 
-    @Override
-    public void downUsers() {
-//        //查出可能需要降级的人员
-//        R<List<AppUser>> topUsers = appUserClient.getTopUsers();
-//        //循环判断是否要展示
-//        if (topUsers.getData()!=null && topUsers.getData().size()>0){
-//            for (AppUser appUser : topUsers.getData()){
-//                if (appUser.getVipId()==5){
-//                    VipSetting vipSetting = this.baseMapper.selectById(5);
-//                    if (vipSetting.getKeepBuyPoint()!=null){
-//                        //如果消费不为空,查找对应天数的消费积分
-//
-//                        //如果消费积分小于保级积分,设置用户降级标志并将降级信息
-//                    }
-//
-//                }
-//            }
-//        }
-
-        //然后设置降级提示
-
-    }
 }
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/task/TaskUtil.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/task/TaskUtil.java
index 6a67a19..5ab7f5a 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/task/TaskUtil.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/task/TaskUtil.java
@@ -1,16 +1,10 @@
 package com.ruoyi.other.task;
 
 
-import com.ruoyi.other.service.VipSettingService;
 
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
-import javax.annotation.Resource;
-import java.util.Date;
-import java.util.List;
 
 
 /**
@@ -19,9 +13,6 @@
 @Component
 public class TaskUtil {
 
-        @Resource
-        private VipSettingService vipSettingService;
-
 
     /**
      * 每天的凌晨执行的任务
@@ -29,9 +20,6 @@
     @Scheduled(cron = "0 0 0 * * *")
     public void taskDay(){
         try {
-
-
-            vipSettingService.downUsers();
         }catch (Exception e){
             e.printStackTrace();
         }
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/payment/PaymentUtil.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/payment/PaymentUtil.java
index b7d8486..c78db82 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/payment/PaymentUtil.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/util/payment/PaymentUtil.java
@@ -6,6 +6,7 @@
 import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.other.util.payment.model.*;
 import lombok.extern.slf4j.Slf4j;
 
@@ -77,7 +78,7 @@
 		//APPID
 		body.put("q7_AppId", appId);
 		//报备商户号
-		body.put("qa_TradeMerchantNo", tradeMerchantNo);
+		body.put("qa_TradeMerchantNo", StringUtils.isNotEmpty(tradeMerchantNo) ? tradeMerchantNo : "777168500885852");
 		String sign = null;
 		try {
 			sign = sign(body);
@@ -252,13 +253,13 @@
 	
 	
 	
-	public static String sign(JSONObject body) throws Exception{
+	public static String sign(JSONObject body) {
 		Set<Map.Entry<String, Object>> entries = body.entrySet();
 		List<Map.Entry<String, Object>> infoIds = new ArrayList<Map.Entry<String, Object>>(entries);
 		// 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)
 		Collections.sort(infoIds, new Comparator<Map.Entry<String, Object>>() {
 			public int compare(Map.Entry<String, Object> o1, Map.Entry<String, Object> o2) {
-				return (o1.getKey()).toString().compareTo(o2.getKey());
+				return (o1.getKey()).compareTo(o2.getKey());
 			}
 		});
 		// 构造签名键值对的格式
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/SeckillActivityVO.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/SeckillActivityVO.java
index 5ff9b25..072d806 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/SeckillActivityVO.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/SeckillActivityVO.java
@@ -50,6 +50,9 @@
     @ApiModelProperty(value = "基础售价")
     private BigDecimal sellingPrice;
 
+    @ApiModelProperty(value = "基础积分")
+    private Integer integral;
+
 
     @ApiModelProperty(value = "开始时间")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
diff --git a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/GoodsMapper.xml b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/GoodsMapper.xml
index 5ca5a61..6bd8276 100644
--- a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/GoodsMapper.xml
+++ b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/GoodsMapper.xml
@@ -4,38 +4,26 @@
 
     <select id="selectListByShopId" resultType="com.ruoyi.other.api.domain.Goods">
         SELECT
-            tg.id,
-            tg.`name`,
-            tg.type,
-            tg.introduction,
-            tg.selling_price,
-            tg.original_price,
-            tg.sale_num,
-            tg.home_page_picture
-        FROM
-            t_shop ts
-                LEFT JOIN t_goods_shop tgs ON ts.id = tgs.shop_id
-                LEFT JOIN t_goods tg ON tg.id = tgs.goods_id
-        where ts.id = #{shopId} and ts.del_flag = 0
+        tg.id,
+        tg.`name`,
+        tg.type,
+        tg.introduction,
+        tg.selling_price as sellingPrice,
+        tg.original_price as originalPrice,
+        tg.integral as integral,
+        tg.sale_num as saleNum,
+        tg.home_page_picture as homePagePicture
+        FROM t_goods tg
+        left join t_goods_shop tgs ON tg.id = tgs.goods_id
+        where tg.del_flag = 0 and (tg.appoint_store = 2 or (tg.appoint_store = 1 and tg.id in (select goods_id from t_goods_shop where shop_id = #{shopId})))
         <if test="vip != null">
-            and FIND_IN_SET(#{vip}, tg.commodity_authority) > 0
+            and (tg.commodity_authority like '%-1%' or tg.commodity_authority like CONCAT('%', #{vip}, '%'))
         </if>
         ORDER BY tg.sale_num DESC
     </select>
     <select id="selectManageGoodsList" resultType="com.ruoyi.other.api.domain.Goods">
         SELECT
-            tg.id,
-            tg.`name`,
-            tg.type,
-            tg.goods_category_id,
-            tgc.`name`,
-            tg.operating_cost,
-            tg.shop_cost,
-            tg.`status`,
-            tg.purchase_limit,
-            tg.sale_num,
-            tg.cash_payment,
-            tg.point_payment
+            tg.*
         FROM
             t_goods tg
                 LEFT JOIN t_goods_category tgc ON tg.goods_category_id = tgc.id
@@ -56,6 +44,17 @@
             <if test="goods.status != null">
                 and tg.`status` = #{goods.status}
             </if>
+
+            <if test="goods.payMethod != null and goods.payMethod == 1 ">
+                and tg.`cashPayment` = 1
+            </if>
+            <if test="goods.payMethod != null and goods.payMethod == 2 ">
+                and tg.`point_payment` = 1
+            </if>
+            <if test="goods.payMethod != null and goods.payMethod == 3 ">
+                and (tg.`point_payment` = 1 or  tg.`cashPayment` = 1 )
+            </if>
+
         </where>
         order by tg.sort desc
     </select>
@@ -69,5 +68,8 @@
         <if test="null != name and '' != name">
             and name like CONCAT('%', #{name}, '%')
         </if>
+        <if test="null != vip">
+            and id in (select goods_id from t_goods_vip where vip = #{vip})
+        </if>
     </select>
 </mapper>
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/SeckillActivityInfoMapper.xml b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/SeckillActivityInfoMapper.xml
index cbbd719..2cabc67 100644
--- a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/SeckillActivityInfoMapper.xml
+++ b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/SeckillActivityInfoMapper.xml
@@ -6,20 +6,21 @@
         SELECT
             tsai.id,
             tg.id as goodsId,
-            tg.`name`,
+            tg.`name` as goodsName,
             tg.introduction,
-            tg.home_page_picture,
-            tg.original_price,
-            tgs.selling_price,
-            tg.sale_num,
-            tsai.start_time
+            tg.home_page_picture as homePagePicture,
+            tg.original_price as originalPrice,
+            tgs.selling_price as sellingPrice,
+            tg.sale_num as saleNum,
+            tsai.start_time as startTime,
+            tsai.end_time as endTime
         FROM
             t_seckill_activity_info tsai
                 LEFT JOIN t_goods tg ON tsai.good_id = tg.id
                 LEFT JOIN t_goods_seckill tgs ON tgs.seckill_activity_info_id = tsai.id and tgs.vip = #{vipId}
-        WHERE tsai.is_shelves = 1 AND tsai.del_flag = 0
+        WHERE tsai.is_shelves = 1 AND tsai.del_flag = 0 and now() between tsai.start_time and tsai.end_time
         <if test="name != null and name != ''">
-            AND tg.`name` LIKE concat('%',#{goodsName},'%')
+            AND tg.`name` LIKE concat('%',#{name},'%')
         </if>
         <if test="goodsCategoryId != null">
             AND tg.goods_category_id = #{goodsCategoryId}
@@ -37,13 +38,14 @@
             tsai.good_id as goodsId,
             tg.`name`,
             tg.introduction,
-            tg.home_page_picture,
-            tg.original_price,
-            tgs.selling_price,
-            tg.sale_num,
-            tsai.start_time,
-            tg.detail_picture,
-            tsai.end_time,
+            tg.home_page_picture as homePagePicture,
+            tg.original_price as originalPrice,
+            tgs.selling_price as sellingPrice,
+            tgs.integral,
+            tg.sale_num as saleNum,
+            tsai.start_time as startTime,
+            tg.detail_picture as detailPicture,
+            tsai.end_time as endTime,
             tg.detail
         FROM
             t_seckill_activity_info tsai

--
Gitblit v1.7.1