From 43d9975c99cb947b4602f05bc2e513a20de92c38 Mon Sep 17 00:00:00 2001
From: jiangqs <jiangqs>
Date: 星期六, 06 五月 2023 20:30:42 +0800
Subject: [PATCH] 商户端主流程

---
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java              |    8 
 ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml                                |   52 +
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/TaskFileService.java                  |   10 
 ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/ShoppingCartMapper.xml                         |   23 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppSimpleGoodsVo.java                  |    4 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/fliter/RepeatedlyRequestWrapper.java           |  111 ++
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/fliter/RepeatedlyRequestWrapper.java             |  111 ++
 ruoyi-modules/ruoyi-order/src/main/resources/mapper/goods/GoodsMapper.xml                                |    8 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/MemberTaskRecordServiceImpl.java |   58 +
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/miniapp/AppHomeController.java          |    4 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/fliter/ParamsAuthFilter.java                       |  103 ++
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/fliter/ParamsAuthFilter.java                   |  103 ++
 ruoyi-auth/src/main/java/com/ruoyi/auth/fliter/ResponseWrapper.java                                      |   63 +
 ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java                                     |    4 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AppMemberBindingDto.java        |   21 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppGoodsInfoVo.java                    |    2 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java   |    6 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MerMemberTaskPageDto.java               |   19 
 ruoyi-auth/pom.xml                                                                                       |    2 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java             |   12 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java     |   15 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/task/MemberTaskRecordMapper.java            |   13 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MerMemberTaskPageVo.java                 |   32 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MerCreateMemberTaskDto.java             |   29 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/fliter/ParamsAuthFilter.java                   |  104 ++
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/MemberTaskServiceImpl.java       |  132 +++
 ruoyi-auth/src/main/java/com/ruoyi/auth/fliter/RepeatedlyRequestWrapper.java                             |  111 ++
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/pojo/task/MemberTaskRecord.java             |    7 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/AppShoppingCartChangeDto.java         |    4 
 ruoyi-auth/src/main/java/com/ruoyi/auth/fliter/ParamsAuthFilter.java                                     |  103 ++
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/fliter/RepeatedlyRequestWrapper.java               |  111 ++
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerShopGoodsEditDto.java              |    2 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/MemberTaskRecordService.java          |   12 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppSimpleActivityGoodsVo.java          |    2 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/MemberTaskService.java                |   27 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppOrderController.java       |   10 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MerMemberTaskRecordPageVo.java           |   47 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java                  |    7 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/AppImmediatelyBuyDto.java           |    2 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/business/MerTaskController.java         |   83 ++
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/task/MemberTaskMapper.java                  |   14 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppShoppingCartVo.java                 |   48 +
 ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml                             |    3 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/fliter/ResponseWrapper.java                        |   63 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerGoodsPageVo.java                    |    2 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java                    |   12 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteMemberService.java                   |    8 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MerFollowMemberTaskDto.java             |   50 +
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/fliter/ResponseWrapper.java                    |   63 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/AppShoppingCartAddDto.java            |    4 
 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/TaskFileServiceImpl.java         |   18 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerOrderPageDto.java                  |   25 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/fliter/ResponseWrapper.java                      |   63 +
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/member/Member.java             |    7 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/fliter/ResponseWrapper.java                    |   63 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppGoodsController.java       |   19 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/ShoppingCartService.java           |   11 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/fliter/ParamsAuthFilter.java                     |  103 ++
 ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/MemberTaskMapper.xml                             |   10 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/fliter/RepeatedlyRequestWrapper.java           |  111 ++
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/ShoppingCartMapper.java             |   12 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java         |   26 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/goods/ShopGoods.java                 |    2 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderGoodsPageVo.java               |   24 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/ShoppingCartServiceImpl.java  |   22 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerMemberController.java   |    2 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderPageVo.java                    |   54 +
 ruoyi-gateway/pom.xml                                                                                    |    1 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerOrderController.java      |   12 
 ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/MemberTaskRecordMapper.xml                       |   15 
 ruoyi-common/ruoyi-common-core/pom.xml                                                                   |    1 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java       |   11 
 72 files changed, 2,424 insertions(+), 32 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteMemberService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteMemberService.java
index 40c9726..7311030 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteMemberService.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteMemberService.java
@@ -2,6 +2,7 @@
 
 import com.ruoyi.common.core.constant.ServiceNameConstants;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.system.api.domain.dto.AppMemberBindingDto;
 import com.ruoyi.system.api.domain.poji.member.Member;
 import com.ruoyi.system.api.domain.vo.AppUserCouponVo;
 import com.ruoyi.system.api.factory.RemoteMemberFallbackFactory;
@@ -33,4 +34,11 @@
     @PostMapping("/member/listVoUserCouponByUserId")
     public R<List<AppUserCouponVo>> listVoUserCouponByUserId(@RequestBody Long userId);
 
+    /**
+     * 更新绑定
+     * @param appMemberBindingDto
+     * @return
+     */
+    @PostMapping("/member/updateMemberBinding")
+    public R updateMemberBinding(@RequestBody AppMemberBindingDto appMemberBindingDto);
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AppMemberBindingDto.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AppMemberBindingDto.java
new file mode 100644
index 0000000..db44bd8
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AppMemberBindingDto.java
@@ -0,0 +1,21 @@
+package com.ruoyi.system.api.domain.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author jqs34
+ * @ClassName AppMemberBindingDto
+ * @description: TODO
+ * @date 2023年05月06日
+ * @version: 1.0
+ */
+@Data
+public class AppMemberBindingDto extends AppBaseDto{
+
+    @ApiModelProperty(value = "绑定标记")
+    private Integer bindingFlag;
+
+    @ApiModelProperty(value = "商户id")
+    private Long shopId;
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/member/Member.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/member/Member.java
index 8a9e83d..2c6dd74 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/member/Member.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/member/Member.java
@@ -126,6 +126,13 @@
      */
     private String avatar;
 
+    /**
+     * 绑定标记0否1是
+     */
+    @TableField("binding_flag")
+    private Integer bindingFlag;
+
+
     @Override
     protected Serializable pkVal() {
         return this.userId;
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java
index 9bdd3de..fd73c1d 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java
@@ -3,6 +3,7 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.system.api.RemoteMemberService;
 import com.ruoyi.system.api.RemoteUserService;
+import com.ruoyi.system.api.domain.dto.AppMemberBindingDto;
 import com.ruoyi.system.api.domain.poji.member.Member;
 import com.ruoyi.system.api.domain.poji.sys.SysFile;
 import com.ruoyi.system.api.domain.poji.sys.SysUser;
@@ -51,6 +52,11 @@
             public R<List<AppUserCouponVo>> listVoUserCouponByUserId(Long userId) {
                 return R.fail("获取用户优惠券失败:" + throwable.getMessage());
             }
+
+            @Override
+            public R updateMemberBinding(AppMemberBindingDto appMemberBindingDto) {
+                return R.fail("更新绑定失败:" + throwable.getMessage());
+            }
         };
     }
 }
diff --git a/ruoyi-auth/pom.xml b/ruoyi-auth/pom.xml
index d937912..26b3f04 100644
--- a/ruoyi-auth/pom.xml
+++ b/ruoyi-auth/pom.xml
@@ -52,6 +52,8 @@
             <artifactId>ruoyi-common-security</artifactId>
         </dependency>
 
+
+
         <!-- Swagger UI -->
         <dependency>
             <groupId>io.springfox</groupId>
diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/fliter/ParamsAuthFilter.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/fliter/ParamsAuthFilter.java
new file mode 100644
index 0000000..59faa71
--- /dev/null
+++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/fliter/ParamsAuthFilter.java
@@ -0,0 +1,103 @@
+package com.ruoyi.auth.fliter;
+
+
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.core.utils.StringUtils;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.HashMap;
+import java.util.Map;
+
+@Component
+@Log4j2
+public class ParamsAuthFilter implements Filter {
+
+    // 令牌自定义标识
+    //@Value("${token.header}")
+    private String header = "Authorization";
+
+
+    @Override
+    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+        HttpServletRequest request = (HttpServletRequest) servletRequest;
+        HttpServletResponse response = (HttpServletResponse) servletResponse;
+
+        RepeatedlyRequestWrapper wrapper = new RepeatedlyRequestWrapper(request, response);
+        getRequestParams(wrapper);
+
+        ResponseWrapper responseWrapper = new ResponseWrapper(response);
+        filterChain.doFilter(wrapper, responseWrapper);
+
+        // 返回的结果
+        String content = responseWrapper.getTextContent();
+        String requestUrl = request.getRequestURI();
+        log.info("-------------------- Response Data ----------------------");
+        log.info(requestUrl + " -> " + content);
+
+        response.getOutputStream().write(content.getBytes());
+    }
+
+
+    private void getRequestParams(HttpServletRequest request){
+        Map<String, String> params = getUrlParams(request);
+        try {
+            String requestUrl = request.getRequestURI();
+            Map<String, String> urlParams = getUrlParams(request);
+            Map<String, String> bodyParams = getBodyParams(request);
+
+            params.putAll(urlParams);
+            params.putAll(bodyParams);
+            log.info("-------------------- request header ----------------------");
+            log.info(header + " -> " + request.getHeader(header));
+            log.info("-------------------- request params ----------------------");
+            log.info(requestUrl + " -> " + JSONObject.toJSONString(params));
+
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+    private Map<String, String> getBodyParams(HttpServletRequest request) throws IOException {
+        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(request.getInputStream()));
+        StringBuilder stringBuilder = new StringBuilder();
+        String buffer = "";
+        while((buffer  = bufferedReader.readLine()) != null){
+            stringBuilder.append(buffer);
+        }
+        String requestBodyStr = stringBuilder.toString();
+        if(StringUtils.isNotBlank(requestBodyStr)){
+            return JSONObject.parseObject(stringBuilder.toString(), Map.class);
+        }
+        return new HashMap<>();
+    }
+
+    private Map<String, String> getUrlParams(HttpServletRequest request){
+        String queryParams = "";
+        try {
+            queryParams = request.getQueryString();
+            if(StringUtils.isNotBlank(queryParams)) {
+                queryParams = URLDecoder.decode(request.getQueryString(), "utf-8");
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        Map<String, String> result = new HashMap<>();
+        if(StringUtils.isNotBlank(queryParams)) {
+            String[] spilt = queryParams.split("&");
+            for (String s : spilt) {
+                int index = s.indexOf("=");
+                result.put(s.substring(0, index), s.substring(index + 1));
+            }
+        }
+        return result;
+    }
+}
diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/fliter/RepeatedlyRequestWrapper.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/fliter/RepeatedlyRequestWrapper.java
new file mode 100644
index 0000000..0292a3d
--- /dev/null
+++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/fliter/RepeatedlyRequestWrapper.java
@@ -0,0 +1,111 @@
+package com.ruoyi.auth.fliter;
+
+import lombok.extern.log4j.Log4j2;
+import org.apache.commons.lang3.exception.ExceptionUtils;
+
+import javax.servlet.ReadListener;
+import javax.servlet.ServletInputStream;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.io.*;
+import java.nio.charset.Charset;
+
+/**
+ * 构建可重复读取inputStream的request
+ *
+ * @author linzhang
+ */
+@Log4j2
+public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper
+{
+    private final byte[] body;
+
+    public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException
+    {
+        super(request);
+        request.setCharacterEncoding("UTF-8");
+        response.setCharacterEncoding("UTF-8");
+
+        body = getBodyString(request).getBytes("UTF-8");
+    }
+
+    public static String getBodyString(ServletRequest request)
+    {
+        StringBuilder sb = new StringBuilder();
+        BufferedReader reader = null;
+        try (InputStream inputStream = request.getInputStream())
+        {
+            reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));
+            String line = "";
+            while ((line = reader.readLine()) != null)
+            {
+                sb.append(line);
+            }
+        }
+        catch (IOException e)
+        {
+            log.warn("getBodyString出现问题!");
+        }
+        finally
+        {
+            if (reader != null)
+            {
+                try
+                {
+                    reader.close();
+                }
+                catch (IOException e)
+                {
+                    log.error(ExceptionUtils.getMessage(e));
+                }
+            }
+        }
+        return sb.toString();
+    }
+
+    @Override
+    public BufferedReader getReader() throws IOException
+    {
+        return new BufferedReader(new InputStreamReader(getInputStream()));
+    }
+
+    @Override
+    public ServletInputStream getInputStream() throws IOException
+    {
+        final ByteArrayInputStream bais = new ByteArrayInputStream(body);
+        return new ServletInputStream()
+        {
+            @Override
+            public int read() throws IOException
+            {
+                return bais.read();
+            }
+
+            @Override
+            public int available() throws IOException
+            {
+                return body.length;
+            }
+
+            @Override
+            public boolean isFinished()
+            {
+                return false;
+            }
+
+            @Override
+            public boolean isReady()
+            {
+                return false;
+            }
+
+            @Override
+            public void setReadListener(ReadListener readListener)
+            {
+
+            }
+        };
+    }
+}
diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/fliter/ResponseWrapper.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/fliter/ResponseWrapper.java
new file mode 100644
index 0000000..a420908
--- /dev/null
+++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/fliter/ResponseWrapper.java
@@ -0,0 +1,63 @@
+package com.ruoyi.auth.fliter;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.WriteListener;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+public class ResponseWrapper extends HttpServletResponseWrapper {
+
+    private ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+    private PrintWriter printWriter = new PrintWriter(outputStream);
+
+    public ResponseWrapper(HttpServletResponse response) {
+        super(response);
+    }
+
+    @Override
+    public PrintWriter getWriter() throws IOException {
+        return printWriter;
+    }
+
+    @Override
+    public ServletOutputStream getOutputStream() throws IOException {
+        return new ServletOutputStream() {
+            @Override
+            public boolean isReady() {
+                return false;
+            }
+
+            @Override
+            public void setWriteListener(WriteListener listener) {
+
+            }
+
+            @Override
+            public void write(int b) throws IOException {
+                outputStream.write(b);
+            }
+        };
+    }
+    public void flush(){
+        try {
+            printWriter.flush();
+            printWriter.close();
+            outputStream.flush();
+            outputStream.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public ByteArrayOutputStream getByteArrayOutputStream(){
+        return outputStream;
+    }
+
+    public String getTextContent() {
+        flush();
+        return outputStream.toString();
+    }
+}
diff --git a/ruoyi-common/ruoyi-common-core/pom.xml b/ruoyi-common/ruoyi-common-core/pom.xml
index 0b6c956..a6d459e 100644
--- a/ruoyi-common/ruoyi-common-core/pom.xml
+++ b/ruoyi-common/ruoyi-common-core/pom.xml
@@ -113,6 +113,7 @@
             <artifactId>swagger-annotations</artifactId>
         </dependency>
 
+
     </dependencies>
 
 </project>
diff --git a/ruoyi-gateway/pom.xml b/ruoyi-gateway/pom.xml
index fbc4da7..59e2bca 100644
--- a/ruoyi-gateway/pom.xml
+++ b/ruoyi-gateway/pom.xml
@@ -88,6 +88,7 @@
             <version>${swagger.fox.version}</version>
         </dependency>
 
+
     </dependencies>
 
     <build>
diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
index 71d8f42..0cf380a 100644
--- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
@@ -48,14 +48,14 @@
         ServerHttpRequest.Builder mutate = request.mutate();
 
         String url = request.getURI().getPath();
-        log.info("url"+url);
+        log.info("requestUrl---"+url);
         // 跳过不需要验证的路径
         if (StringUtils.matches(url, ignoreWhite.getWhites()))
         {
             return chain.filter(exchange);
         }
         String token = getToken(request);
-        log.info("token"+token);
+        log.info("requestToken---"+token);
         if (StringUtils.isEmpty(token))
         {
             return unauthorizedResponse(exchange, "令牌不能为空");
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerMemberController.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerMemberController.java
index 17a4f67..751b09d 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerMemberController.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/business/MerMemberController.java
@@ -72,4 +72,6 @@
         MerMemberInfoVo merMemberInfo = memberService.getMerMemberInfo(userId);
         return R.ok(merMemberInfo);
     }
+
+
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java
index 3626ab8..410aa51 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java
@@ -5,8 +5,10 @@
 import com.ruoyi.common.security.annotation.InnerAuth;
 import com.ruoyi.member.service.member.MemberService;
 import com.ruoyi.member.service.member.UserCouponService;
+import com.ruoyi.system.api.domain.dto.AppMemberBindingDto;
 import com.ruoyi.system.api.domain.poji.member.Member;
 import com.ruoyi.system.api.domain.vo.AppUserCouponVo;
+import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo;
 import com.ruoyi.system.api.model.AppMiniLoginDto;
 import com.ruoyi.system.api.model.AppMiniLoginVo;
 import io.swagger.annotations.ApiOperation;
@@ -33,7 +35,7 @@
     * @date: 2023/4/30 12:49
     */
 
-    @GetMapping("/getMember")
+    @PostMapping("/getMember")
     public R<Member> getMember(@RequestBody Long userId)
     {
         Member member = memberService.getByUserId(userId);
@@ -70,4 +72,11 @@
         List<AppUserCouponVo> appUserCouponVoList = userCouponService.listVoUserCouponByUserId(userId);
         return R.ok(appUserCouponVoList);
     }
+
+    @PostMapping("/updateMemberBinding")
+    public R updateMemberBinding(@RequestBody AppMemberBindingDto appMemberBindingDto)
+    {
+        memberService.updateMemberBinding(appMemberBindingDto);
+        return R.ok();
+    }
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/fliter/ParamsAuthFilter.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/fliter/ParamsAuthFilter.java
new file mode 100644
index 0000000..cab063c
--- /dev/null
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/fliter/ParamsAuthFilter.java
@@ -0,0 +1,104 @@
+package com.ruoyi.member.fliter;
+
+
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.core.utils.StringUtils;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.HashMap;
+import java.util.Map;
+
+@Component
+@Log4j2
+public class ParamsAuthFilter implements Filter {
+
+    // 令牌自定义标识
+    //@Value("${token.header}")
+    private String header = "Authorization";
+
+
+    @Override
+    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+        HttpServletRequest request = (HttpServletRequest) servletRequest;
+        HttpServletResponse response = (HttpServletResponse) servletResponse;
+
+        RepeatedlyRequestWrapper wrapper = new RepeatedlyRequestWrapper(request, response);
+        getRequestParams(wrapper);
+
+        ResponseWrapper responseWrapper = new ResponseWrapper(response);
+        filterChain.doFilter(wrapper, responseWrapper);
+
+        // 返回的结果
+        String content = responseWrapper.getTextContent();
+        String requestUrl = request.getRequestURI();
+        log.info("-------------------- Response Data ----------------------");
+        log.info(requestUrl + " -> " + content);
+
+        response.getOutputStream().write(content.getBytes());
+    }
+
+
+    private void getRequestParams(HttpServletRequest request){
+        Map<String, String> params = getUrlParams(request);
+        try {
+            String requestUrl = request.getRequestURI();
+            Map<String, String> urlParams = getUrlParams(request);
+            Map<String, String> bodyParams = getBodyParams(request);
+
+            params.putAll(urlParams);
+            params.putAll(bodyParams);
+            log.info("-------------------- request header ----------------------");
+            log.info(header + " -> " + request.getHeader(header));
+            log.info("-------------------- request params ----------------------");
+            log.info(requestUrl + " -> " + JSONObject.toJSONString(params));
+
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+    private Map<String, String> getBodyParams(HttpServletRequest request) throws IOException {
+        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(request.getInputStream()));
+        StringBuilder stringBuilder = new StringBuilder();
+        String buffer = "";
+        while((buffer  = bufferedReader.readLine()) != null){
+            stringBuilder.append(buffer);
+        }
+        String requestBodyStr = stringBuilder.toString();
+        log.info("requestBodyStr---"+requestBodyStr);
+        if(StringUtils.isNotBlank(requestBodyStr)){
+            return JSONObject.parseObject(stringBuilder.toString(), Map.class);
+        }
+        return new HashMap<>();
+    }
+
+    private Map<String, String> getUrlParams(HttpServletRequest request){
+        String queryParams = "";
+        try {
+            queryParams = request.getQueryString();
+            if(StringUtils.isNotBlank(queryParams)) {
+                queryParams = URLDecoder.decode(request.getQueryString(), "utf-8");
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        Map<String, String> result = new HashMap<>();
+        if(StringUtils.isNotBlank(queryParams)) {
+            String[] spilt = queryParams.split("&");
+            for (String s : spilt) {
+                int index = s.indexOf("=");
+                result.put(s.substring(0, index), s.substring(index + 1));
+            }
+        }
+        return result;
+    }
+}
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/fliter/RepeatedlyRequestWrapper.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/fliter/RepeatedlyRequestWrapper.java
new file mode 100644
index 0000000..13d3d5b
--- /dev/null
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/fliter/RepeatedlyRequestWrapper.java
@@ -0,0 +1,111 @@
+package com.ruoyi.member.fliter;
+
+import lombok.extern.log4j.Log4j2;
+import org.apache.commons.lang3.exception.ExceptionUtils;
+
+import javax.servlet.ReadListener;
+import javax.servlet.ServletInputStream;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.io.*;
+import java.nio.charset.Charset;
+
+/**
+ * 构建可重复读取inputStream的request
+ *
+ * @author linzhang
+ */
+@Log4j2
+public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper
+{
+    private final byte[] body;
+
+    public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException
+    {
+        super(request);
+        request.setCharacterEncoding("UTF-8");
+        response.setCharacterEncoding("UTF-8");
+
+        body = getBodyString(request).getBytes("UTF-8");
+    }
+
+    public static String getBodyString(ServletRequest request)
+    {
+        StringBuilder sb = new StringBuilder();
+        BufferedReader reader = null;
+        try (InputStream inputStream = request.getInputStream())
+        {
+            reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));
+            String line = "";
+            while ((line = reader.readLine()) != null)
+            {
+                sb.append(line);
+            }
+        }
+        catch (IOException e)
+        {
+            log.warn("getBodyString出现问题!");
+        }
+        finally
+        {
+            if (reader != null)
+            {
+                try
+                {
+                    reader.close();
+                }
+                catch (IOException e)
+                {
+                    log.error(ExceptionUtils.getMessage(e));
+                }
+            }
+        }
+        return sb.toString();
+    }
+
+    @Override
+    public BufferedReader getReader() throws IOException
+    {
+        return new BufferedReader(new InputStreamReader(getInputStream()));
+    }
+
+    @Override
+    public ServletInputStream getInputStream() throws IOException
+    {
+        final ByteArrayInputStream bais = new ByteArrayInputStream(body);
+        return new ServletInputStream()
+        {
+            @Override
+            public int read() throws IOException
+            {
+                return bais.read();
+            }
+
+            @Override
+            public int available() throws IOException
+            {
+                return body.length;
+            }
+
+            @Override
+            public boolean isFinished()
+            {
+                return false;
+            }
+
+            @Override
+            public boolean isReady()
+            {
+                return false;
+            }
+
+            @Override
+            public void setReadListener(ReadListener readListener)
+            {
+
+            }
+        };
+    }
+}
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/fliter/ResponseWrapper.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/fliter/ResponseWrapper.java
new file mode 100644
index 0000000..ec17f99
--- /dev/null
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/fliter/ResponseWrapper.java
@@ -0,0 +1,63 @@
+package com.ruoyi.member.fliter;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.WriteListener;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+public class ResponseWrapper extends HttpServletResponseWrapper {
+
+    private ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+    private PrintWriter printWriter = new PrintWriter(outputStream);
+
+    public ResponseWrapper(HttpServletResponse response) {
+        super(response);
+    }
+
+    @Override
+    public PrintWriter getWriter() throws IOException {
+        return printWriter;
+    }
+
+    @Override
+    public ServletOutputStream getOutputStream() throws IOException {
+        return new ServletOutputStream() {
+            @Override
+            public boolean isReady() {
+                return false;
+            }
+
+            @Override
+            public void setWriteListener(WriteListener listener) {
+
+            }
+
+            @Override
+            public void write(int b) throws IOException {
+                outputStream.write(b);
+            }
+        };
+    }
+    public void flush(){
+        try {
+            printWriter.flush();
+            printWriter.close();
+            outputStream.flush();
+            outputStream.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public ByteArrayOutputStream getByteArrayOutputStream(){
+        return outputStream;
+    }
+
+    public String getTextContent() {
+        flush();
+        return outputStream.toString();
+    }
+}
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
index 5ece8ef..d689ce0 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -23,10 +23,12 @@
 import com.ruoyi.system.api.constant.AppErrorConstant;
 import com.ruoyi.system.api.constant.SecurityConstant;
 import com.ruoyi.system.api.domain.dto.AppEditUserDto;
+import com.ruoyi.system.api.domain.dto.AppMemberBindingDto;
 import com.ruoyi.system.api.domain.poji.member.Member;
 import com.ruoyi.system.api.domain.poji.shop.Shop;
 import com.ruoyi.system.api.domain.poji.sys.SysUser;
 import com.ruoyi.system.api.domain.vo.AppOrderTotalVo;
+import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo;
 import com.ruoyi.system.api.model.AppMiniLoginDto;
 import com.ruoyi.system.api.model.AppMiniLoginVo;
 import lombok.extern.log4j.Log4j;
@@ -137,6 +139,7 @@
                 member.setMemberId(memberId);
                 member.setWxUnionid(unionid);
                 member.setMiniOpenid(openid);
+                member.setBindingFlag(0);
                 member.setCreateTime(new Date());
                 this.save(member);
 
@@ -360,4 +363,16 @@
         List<MerCashMemberPageVo> merCashMemberPageVos = memberMapper.pageMerCashMember(page,merCashMemberPageDto);
         return merCashMemberPageVos;
     }
+
+    /**
+     *
+     * @param appMemberBindingDto
+     */
+    @Override
+    public void updateMemberBinding(AppMemberBindingDto appMemberBindingDto){
+        Member member = this.getByUserId(appMemberBindingDto.getUserId());
+        member.setBindingFlag(appMemberBindingDto.getBindingFlag());
+        member.setRelationShopId(appMemberBindingDto.getShopId());
+        this.saveOrUpdate(member);
+    }
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java
index 34c9290..2c75d14 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java
@@ -5,7 +5,9 @@
 import com.ruoyi.member.domain.dto.MerMemberPageDto;
 import com.ruoyi.member.domain.vo.*;
 import com.ruoyi.system.api.domain.dto.AppEditUserDto;
+import com.ruoyi.system.api.domain.dto.AppMemberBindingDto;
 import com.ruoyi.system.api.domain.poji.member.Member;
+import com.ruoyi.system.api.domain.vo.MerHomeShopTotalVo;
 import com.ruoyi.system.api.model.AppMiniLoginDto;
 import com.ruoyi.system.api.model.AppMiniLoginVo;
 import com.ruoyi.member.domain.dto.AppUserAuthorizeDto;
@@ -80,4 +82,10 @@
      * @return
      */
     List<MerCashMemberPageVo> pageMerCashMember(Page page, MerCashMemberPageDto merCashMemberPageDto);
+
+    /**
+     *
+     * @param appMemberBindingDto
+     */
+    void updateMemberBinding(AppMemberBindingDto appMemberBindingDto);
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml b/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml
index 79505f2..3caaae1 100644
--- a/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml
+++ b/ruoyi-modules/ruoyi-member/src/main/resources/mapper/member/MemberMapper.xml
@@ -23,10 +23,11 @@
         <result property="updateUserId"    column="update_user_id"    />
         <result property="userTags"    column="user_tags"    />
         <result property="avatar"    column="avatar"    />
+        <result property="bindingFlag"    column="binding_flag"    />
     </resultMap>
 
     <sql id="selectMemberVo">
-        select user_id, del_flag, member_id, member_no, wx_openid, mini_openid, wx_unionid, relation_shop_id, real_name, mobile, gender, referrer, customer_source, level, birthday, create_time, update_time, update_user_id, user_tags, avatar from t_member
+        select user_id, del_flag, member_id, member_no, wx_openid, mini_openid, wx_unionid, relation_shop_id, real_name, mobile, gender, referrer, customer_source, level, birthday, create_time, update_time, update_user_id, user_tags, avatar, binding_flag from t_member
     </sql>
 
     <select id="selectMemberList" parameterType="com.ruoyi.system.api.domain.poji.member.Member" resultMap="MemberResult">
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerOrderController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerOrderController.java
index 53bff3f..77e11bb 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerOrderController.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerOrderController.java
@@ -109,5 +109,15 @@
         return R.ok();
     }
 
-
+    @RequestMapping(value = "/pageMerOrder", method = RequestMethod.POST)
+    @ApiOperation(value = "获取商户端订单列表")
+    public R<Page<MerOrderPageVo>> pageMerOrder(@RequestBody MerOrderPageDto merOrderPageDto) {
+        Long userId = SecurityUtils.getUserId();
+        merOrderPageDto.setUserId(userId);
+        Page<MerOrderPageVo> page = new Page<>();
+        page.setSize(merOrderPageDto.getPageSize());
+        page.setCurrent(merOrderPageDto.getPageNum());
+        List<MerOrderPageVo> merOrderPageVoList = orderService.pageMerOrder(page,merOrderPageDto);
+        return R.ok(page.setRecords(merOrderPageVoList));
+    }
 }
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppGoodsController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppGoodsController.java
index b1039ae..4fd0949 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppGoodsController.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppGoodsController.java
@@ -3,6 +3,7 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.controller.BaseController;
 import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.order.domain.vo.AppShoppingCartVo;
 import com.ruoyi.system.api.domain.dto.AppBaseBathDto;
 import com.ruoyi.order.domain.dto.AppGoodsInfoGetDto;
 import com.ruoyi.order.domain.dto.AppShoppingCartAddDto;
@@ -11,6 +12,7 @@
 import com.ruoyi.order.service.goods.GoodsService;
 import com.ruoyi.order.service.order.ShoppingCartService;
 import com.ruoyi.system.api.RemoteMemberService;
+import com.ruoyi.system.api.domain.dto.AppBaseDto;
 import com.ruoyi.system.api.domain.poji.member.Member;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -19,6 +21,8 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
 
 /**
  * @author jqs34
@@ -55,6 +59,16 @@
         return R.ok(appGoodsInfoVo);
     }
 
+    @RequestMapping(value = "/listShoppingCart", method = RequestMethod.POST)
+    @ApiOperation(value = "获取购物车列表")
+    public R<List<AppShoppingCartVo>> listShoppingCart() {
+        Long userId = SecurityUtils.getUserId();
+        Member member = memberService.getMember(userId).getData();
+        Long shopId = member.getRelationShopId();
+        List<AppShoppingCartVo> appShoppingCartVoList = shoppingCartService.listShoppingCartVo(userId, shopId);
+        return R.ok(appShoppingCartVoList);
+    }
+
     @RequestMapping(value = "/addShoppingCart", method = RequestMethod.POST)
     @ApiOperation(value = "添加购物车")
     public R addShoppingCart(@RequestBody AppShoppingCartAddDto appShoppingCartAddDto) {
@@ -89,10 +103,7 @@
     @ApiOperation(value = "删除购物车")
     public R changeShoppingCart(@RequestBody AppBaseBathDto appBaseBathDto) {
         Long userId = SecurityUtils.getUserId();
-        if(userId!=null){
-            Member member = memberService.getMember(userId).getData();
-            appBaseBathDto.setUserId(userId);
-        }
+        appBaseBathDto.setUserId(userId);
         shoppingCartService.deleteShoppingCart(appBaseBathDto);
         return R.ok();
     }
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppOrderController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppOrderController.java
index 9d0e97a..6eb203e 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppOrderController.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppOrderController.java
@@ -9,6 +9,7 @@
 import com.ruoyi.order.service.order.OrderService;
 import com.ruoyi.system.api.RemoteMemberService;
 import com.ruoyi.system.api.domain.dto.AppBaseGetDto;
+import com.ruoyi.system.api.domain.dto.AppMemberBindingDto;
 import com.ruoyi.system.api.domain.poji.member.Member;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -64,6 +65,14 @@
             if(member!=null&&member.getRelationShopId()!=null){
                 appPlaceOrderDto.setShopId(member.getRelationShopId());
             }
+            if(member.getBindingFlag()!=1){
+                //绑定商户
+                AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto();
+                appMemberBindingDto.setShopId(appPlaceOrderDto.getShopId());
+                appMemberBindingDto.setUserId(userId);
+                appMemberBindingDto.setBindingFlag(1);
+                memberService.updateMemberBinding(appMemberBindingDto);
+            }
         }
         AppPlaceOrderVo appPlaceOrderVo = orderService.placeOrder(appPlaceOrderDto);
         return R.ok(appPlaceOrderVo);
@@ -80,6 +89,7 @@
                 appUserOrderPageDto.setShopId(member.getRelationShopId());
             }
         }
+        logger.info("appUserOrderPageDto:"+appUserOrderPageDto.toString());
         Page<AppUserOrderPageVo> page = new Page<>();
         page.setSize(appUserOrderPageDto.getPageSize());
         page.setCurrent(appUserOrderPageDto.getPageNum());
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/AppShoppingCartAddDto.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/AppShoppingCartAddDto.java
index 61b50a1..4d6c85e 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/AppShoppingCartAddDto.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/AppShoppingCartAddDto.java
@@ -14,11 +14,11 @@
 @Data
 public class AppShoppingCartAddDto extends AppBaseDto {
 
-    @ApiModelProperty(value = "shopId",hidden = true)
+    @ApiModelProperty(value = "商户id")
     private Long shopId;
 
     @ApiModelProperty(value = "商品id")
-    private Long goodsId;
+    private String goodsId;
 
     @ApiModelProperty(value = "购买数量")
     private Integer buyNum;
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/AppShoppingCartChangeDto.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/AppShoppingCartChangeDto.java
index 9c827b9..a96b6a1 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/AppShoppingCartChangeDto.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/AppShoppingCartChangeDto.java
@@ -17,8 +17,8 @@
     @ApiModelProperty(value = "shopId",hidden = true)
     private Long shopId;
 
-    @ApiModelProperty(value = "商品id")
-    private Long goodsId;
+    @ApiModelProperty(value = "购物车id")
+    private Long shoppingCartId;
 
     @ApiModelProperty(value = "变化后数量")
     private Integer buyNum;
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerOrderPageDto.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerOrderPageDto.java
new file mode 100644
index 0000000..b1695b2
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerOrderPageDto.java
@@ -0,0 +1,25 @@
+package com.ruoyi.order.domain.dto;
+
+import com.ruoyi.system.api.domain.dto.MerPageDto;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author jqs34
+ * @ClassName MerMemberNoClearOrderDto
+ * @description: TODO
+ * @date 2023年05月05日
+ * @version: 1.0
+ */
+@Data
+public class MerOrderPageDto extends MerPageDto {
+
+
+    @ApiModelProperty(value = "搜索关键词")
+    private String keyword;
+
+
+    @ApiModelProperty(value = "1.全部2.待核销3.已核销")
+    private Integer type;
+
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerShopGoodsEditDto.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerShopGoodsEditDto.java
index 966665b..9bb8260 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerShopGoodsEditDto.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerShopGoodsEditDto.java
@@ -17,7 +17,7 @@
 public class MerShopGoodsEditDto extends MerBaseDto {
 
     @ApiModelProperty(value = "商品id")
-    private Long goodsId;
+    private String goodsId;
 
     @ApiModelProperty(value = "售价")
     private BigDecimal salePrice;
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/goods/ShopGoods.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/goods/ShopGoods.java
index c185060..19a2dfa 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/goods/ShopGoods.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/goods/ShopGoods.java
@@ -45,7 +45,7 @@
      * 商品id
      */
     @TableField("goods_id")
-    private Long goodsId;
+    private String goodsId;
     /**
      * 商户售价
      */
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppGoodsInfoVo.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppGoodsInfoVo.java
index 71669a2..bcf2a61 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppGoodsInfoVo.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppGoodsInfoVo.java
@@ -17,7 +17,7 @@
 public class AppGoodsInfoVo {
 
     @ApiModelProperty(value = "商品id")
-    private Long goodsId;
+    private String goodsId;
 
     @ApiModelProperty(value = "商品名称")
     private String goodsName;
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppShoppingCartVo.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppShoppingCartVo.java
new file mode 100644
index 0000000..31924d6
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppShoppingCartVo.java
@@ -0,0 +1,48 @@
+package com.ruoyi.order.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author jqs34
+ * @ClassName AppShoppingCartVo
+ * @description: TODO
+ * @date 2023年05月06日
+ * @version: 1.0
+ */
+@Data
+public class AppShoppingCartVo {
+
+    @ApiModelProperty(value = "购物车id")
+    private Long shoppingCartId;
+
+    @ApiModelProperty(value = "商品id")
+    private String goodsId;
+
+    @ApiModelProperty(value = "商品名称")
+    private String goodsName;
+
+    @ApiModelProperty(value = "商品简介")
+    private String goodsIntroduction;
+
+    @ApiModelProperty(value = "商品图片")
+    private String goodsPicture;
+
+    @ApiModelProperty(value = "商品类型1周期2服务3体验4单品")
+    private Integer goodsType;
+
+    @ApiModelProperty(value = "商品标签")
+    private String goodsTag;
+
+    @ApiModelProperty(value = "商品调理问题")
+    private String goodsNurses;
+
+    @ApiModelProperty(value = "商品售价")
+    private BigDecimal salesPrice;
+
+    @ApiModelProperty(value = "购买数量")
+    private Integer buyNum;
+
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppSimpleActivityGoodsVo.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppSimpleActivityGoodsVo.java
index 8a00333..c3a9d90 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppSimpleActivityGoodsVo.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppSimpleActivityGoodsVo.java
@@ -16,7 +16,7 @@
 public class AppSimpleActivityGoodsVo {
 
     @ApiModelProperty(value = "商品id")
-    private Long goodsId;
+    private String goodsId;
 
     @ApiModelProperty(value = "商品名称")
     private String goodsName;
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppSimpleGoodsVo.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppSimpleGoodsVo.java
index 7bdd3a7..0fb398d 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppSimpleGoodsVo.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/AppSimpleGoodsVo.java
@@ -16,7 +16,7 @@
 public class AppSimpleGoodsVo {
 
     @ApiModelProperty(value = "商品id")
-    private Long goodsId;
+    private String goodsId;
 
     @ApiModelProperty(value = "商品名称")
     private String goodsName;
@@ -34,7 +34,7 @@
     private String goodsTag;
 
     @ApiModelProperty(value = "商品调理问题")
-    private BigDecimal goodsNurses;
+    private String goodsNurses;
 
     @ApiModelProperty(value = "商品售价")
     private BigDecimal salesPrice;
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerGoodsPageVo.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerGoodsPageVo.java
index 42f06f9..9d8b476 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerGoodsPageVo.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerGoodsPageVo.java
@@ -17,7 +17,7 @@
 public class MerGoodsPageVo {
 
     @ApiModelProperty(value = "商品id")
-    private Long goodsId;
+    private String goodsId;
 
     @ApiModelProperty(value = "商品名称")
     private String goodsName;
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderGoodsPageVo.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderGoodsPageVo.java
new file mode 100644
index 0000000..f808ff7
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderGoodsPageVo.java
@@ -0,0 +1,24 @@
+package com.ruoyi.order.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author jqs34
+ * @ClassName MerOrderGoodsVo
+ * @description: TODO
+ * @date 2023年05月06日
+ * @version: 1.0
+ */
+@Data
+public class MerOrderGoodsPageVo {
+
+    @ApiModelProperty("商品名字")
+    private String goodsName;
+
+    @ApiModelProperty("购买数量")
+    private Integer buyNum;
+
+    @ApiModelProperty(value = "商品类型1周期2服务3体验4单品")
+    private Integer goodsType;
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderPageVo.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderPageVo.java
new file mode 100644
index 0000000..e11bf70
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderPageVo.java
@@ -0,0 +1,54 @@
+package com.ruoyi.order.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author jqs34
+ * @ClassName MerMemberUnclearOrder
+ * @description: TODO
+ * @date 2023年05月05日
+ * @version: 1.0
+ */
+@Data
+public class MerOrderPageVo {
+
+    @ApiModelProperty(value = "用户id")
+    private Long userId;
+
+    @ApiModelProperty(value = "订单id")
+    private String orderId;
+
+    @ApiModelProperty("订单编号")
+    private String orderNo;
+
+    @ApiModelProperty(value = "订单状态0.已取消1.待支付2.待核销3.已完成")
+    private Integer orderStatus;
+
+    @ApiModelProperty(value = "商品总价")
+    private BigDecimal orderGoodsMoney;
+
+    @ApiModelProperty(value = "优惠券抵扣")
+    private BigDecimal couponDiscount;
+
+    @ApiModelProperty("应收金额")
+    private BigDecimal receivableMoney;
+
+    @ApiModelProperty("应收订金")
+    private BigDecimal receivableDeposit;
+
+    @ApiModelProperty("订单实际支付金额")
+    private BigDecimal payMoney;
+
+    @ApiModelProperty("订单未支付金额")
+    private BigDecimal unPaidMoney;
+
+    @ApiModelProperty("订单备注")
+    private String orderRemark;
+
+    @ApiModelProperty("订单商品列表")
+    private List<MerOrderGoodsPageVo> merOrderGoodsVoList;
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/fliter/ParamsAuthFilter.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/fliter/ParamsAuthFilter.java
new file mode 100644
index 0000000..4c9ab17
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/fliter/ParamsAuthFilter.java
@@ -0,0 +1,103 @@
+package com.ruoyi.order.fliter;
+
+
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.core.utils.StringUtils;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.HashMap;
+import java.util.Map;
+
+@Component
+@Log4j2
+public class ParamsAuthFilter implements Filter {
+
+    // 令牌自定义标识
+    //@Value("${token.header}")
+    private String header = "Authorization";
+
+
+    @Override
+    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+        HttpServletRequest request = (HttpServletRequest) servletRequest;
+        HttpServletResponse response = (HttpServletResponse) servletResponse;
+
+        RepeatedlyRequestWrapper wrapper = new RepeatedlyRequestWrapper(request, response);
+        getRequestParams(wrapper);
+
+        ResponseWrapper responseWrapper = new ResponseWrapper(response);
+        filterChain.doFilter(wrapper, responseWrapper);
+
+        // 返回的结果
+        String content = responseWrapper.getTextContent();
+        String requestUrl = request.getRequestURI();
+        log.info("-------------------- Response Data ----------------------");
+        log.info(requestUrl + " -> " + content);
+
+        response.getOutputStream().write(content.getBytes());
+    }
+
+
+    private void getRequestParams(HttpServletRequest request){
+        Map<String, String> params = getUrlParams(request);
+        try {
+            String requestUrl = request.getRequestURI();
+            Map<String, String> urlParams = getUrlParams(request);
+            Map<String, String> bodyParams = getBodyParams(request);
+
+            params.putAll(urlParams);
+            params.putAll(bodyParams);
+            log.info("-------------------- request header ----------------------");
+            log.info(header + " -> " + request.getHeader(header));
+            log.info("-------------------- request params ----------------------");
+            log.info(requestUrl + " -> " + JSONObject.toJSONString(params));
+
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+    private Map<String, String> getBodyParams(HttpServletRequest request) throws IOException {
+        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(request.getInputStream()));
+        StringBuilder stringBuilder = new StringBuilder();
+        String buffer = "";
+        while((buffer  = bufferedReader.readLine()) != null){
+            stringBuilder.append(buffer);
+        }
+        String requestBodyStr = stringBuilder.toString();
+        if(StringUtils.isNotBlank(requestBodyStr)){
+            return JSONObject.parseObject(stringBuilder.toString(), Map.class);
+        }
+        return new HashMap<>();
+    }
+
+    private Map<String, String> getUrlParams(HttpServletRequest request){
+        String queryParams = "";
+        try {
+            queryParams = request.getQueryString();
+            if(StringUtils.isNotBlank(queryParams)) {
+                queryParams = URLDecoder.decode(request.getQueryString(), "utf-8");
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        Map<String, String> result = new HashMap<>();
+        if(StringUtils.isNotBlank(queryParams)) {
+            String[] spilt = queryParams.split("&");
+            for (String s : spilt) {
+                int index = s.indexOf("=");
+                result.put(s.substring(0, index), s.substring(index + 1));
+            }
+        }
+        return result;
+    }
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/fliter/RepeatedlyRequestWrapper.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/fliter/RepeatedlyRequestWrapper.java
new file mode 100644
index 0000000..6ff7817
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/fliter/RepeatedlyRequestWrapper.java
@@ -0,0 +1,111 @@
+package com.ruoyi.order.fliter;
+
+import lombok.extern.log4j.Log4j2;
+import org.apache.commons.lang3.exception.ExceptionUtils;
+
+import javax.servlet.ReadListener;
+import javax.servlet.ServletInputStream;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.io.*;
+import java.nio.charset.Charset;
+
+/**
+ * 构建可重复读取inputStream的request
+ *
+ * @author linzhang
+ */
+@Log4j2
+public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper
+{
+    private final byte[] body;
+
+    public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException
+    {
+        super(request);
+        request.setCharacterEncoding("UTF-8");
+        response.setCharacterEncoding("UTF-8");
+
+        body = getBodyString(request).getBytes("UTF-8");
+    }
+
+    public static String getBodyString(ServletRequest request)
+    {
+        StringBuilder sb = new StringBuilder();
+        BufferedReader reader = null;
+        try (InputStream inputStream = request.getInputStream())
+        {
+            reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));
+            String line = "";
+            while ((line = reader.readLine()) != null)
+            {
+                sb.append(line);
+            }
+        }
+        catch (IOException e)
+        {
+            log.warn("getBodyString出现问题!");
+        }
+        finally
+        {
+            if (reader != null)
+            {
+                try
+                {
+                    reader.close();
+                }
+                catch (IOException e)
+                {
+                    log.error(ExceptionUtils.getMessage(e));
+                }
+            }
+        }
+        return sb.toString();
+    }
+
+    @Override
+    public BufferedReader getReader() throws IOException
+    {
+        return new BufferedReader(new InputStreamReader(getInputStream()));
+    }
+
+    @Override
+    public ServletInputStream getInputStream() throws IOException
+    {
+        final ByteArrayInputStream bais = new ByteArrayInputStream(body);
+        return new ServletInputStream()
+        {
+            @Override
+            public int read() throws IOException
+            {
+                return bais.read();
+            }
+
+            @Override
+            public int available() throws IOException
+            {
+                return body.length;
+            }
+
+            @Override
+            public boolean isFinished()
+            {
+                return false;
+            }
+
+            @Override
+            public boolean isReady()
+            {
+                return false;
+            }
+
+            @Override
+            public void setReadListener(ReadListener readListener)
+            {
+
+            }
+        };
+    }
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/fliter/ResponseWrapper.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/fliter/ResponseWrapper.java
new file mode 100644
index 0000000..f8e74c2
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/fliter/ResponseWrapper.java
@@ -0,0 +1,63 @@
+package com.ruoyi.order.fliter;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.WriteListener;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+public class ResponseWrapper extends HttpServletResponseWrapper {
+
+    private ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+    private PrintWriter printWriter = new PrintWriter(outputStream);
+
+    public ResponseWrapper(HttpServletResponse response) {
+        super(response);
+    }
+
+    @Override
+    public PrintWriter getWriter() throws IOException {
+        return printWriter;
+    }
+
+    @Override
+    public ServletOutputStream getOutputStream() throws IOException {
+        return new ServletOutputStream() {
+            @Override
+            public boolean isReady() {
+                return false;
+            }
+
+            @Override
+            public void setWriteListener(WriteListener listener) {
+
+            }
+
+            @Override
+            public void write(int b) throws IOException {
+                outputStream.write(b);
+            }
+        };
+    }
+    public void flush(){
+        try {
+            printWriter.flush();
+            printWriter.close();
+            outputStream.flush();
+            outputStream.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public ByteArrayOutputStream getByteArrayOutputStream(){
+        return outputStream;
+    }
+
+    public String getTextContent() {
+        flush();
+        return outputStream.toString();
+    }
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java
index 8c0d17a..a79cfdd 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java
@@ -2,10 +2,12 @@
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.order.domain.dto.AppUserOrderPageDto;
+import com.ruoyi.order.domain.dto.MerOrderPageDto;
 import com.ruoyi.order.domain.pojo.order.Order;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.order.domain.vo.AppUserOrderPageVo;
 import com.ruoyi.order.domain.vo.MerMemberNoClearOrderVo;
+import com.ruoyi.order.domain.vo.MerOrderPageVo;
 import com.ruoyi.system.api.domain.dto.MerPageDto;
 import org.apache.ibatis.annotations.Param;
 
@@ -36,4 +38,14 @@
      * @return
      */
     List<MerMemberNoClearOrderVo> pageMerMemberNoClearOrder(Page page,  @Param("userId") Long userId);
+
+
+
+    /**
+     *
+     * @param merOrderPageDto
+     * @return
+     */
+    List<MerOrderPageVo> pageMerOrder(Page page,@Param("param") MerOrderPageDto merOrderPageDto);
+
 }
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/ShoppingCartMapper.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/ShoppingCartMapper.java
index df13af4..f63ccd1 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/ShoppingCartMapper.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/ShoppingCartMapper.java
@@ -2,6 +2,10 @@
 
 import com.ruoyi.order.domain.pojo.order.ShoppingCart;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.order.domain.vo.AppShoppingCartVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -18,4 +22,12 @@
      * @param ids
      */
     void deleteShoppingCartByIds(String ids);
+
+    /**
+     *
+     * @param userId
+     * @param shopId
+     * @return
+     */
+    List<AppShoppingCartVo> listShoppingCartVo(@Param("userId") Long userId, @Param("shopId")Long shopId);
 }
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
index 126199b..d8319b0 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -26,6 +26,8 @@
 import com.ruoyi.system.api.RemoteUserService;
 import com.ruoyi.system.api.constant.AppErrorConstant;
 import com.ruoyi.system.api.domain.dto.AppBaseGetDto;
+import com.ruoyi.system.api.domain.dto.AppMemberBindingDto;
+import com.ruoyi.system.api.domain.poji.member.Member;
 import com.ruoyi.system.api.domain.poji.shop.Shop;
 import com.ruoyi.system.api.domain.poji.sys.SysUser;
 import com.ruoyi.system.api.domain.vo.AppOrderTotalVo;
@@ -352,6 +354,7 @@
         this.save(order);
         appPlaceOrderVo.setOrderId(orderId);
         appPlaceOrderVo.setOrderNo(orderNo);
+
         //调用支付
 
         return appPlaceOrderVo;
@@ -699,7 +702,7 @@
         order.setDelFlag(0);
         order.setOrderStatus(3);
         order.setOrderNo(orderNo);
-        order.setOrderFrom(1);
+        order.setOrderFrom(3);
         order.setShopId(merNewOrderDto.getShopId());
         order.setUserId(userId);
         order.setOrderMoney(orderGoodsMoney);
@@ -750,5 +753,26 @@
             consumerGoods.setCreateTime(new Date());
             consumerGoodsService.save(consumerGoods);
         }
+        Member member = remoteMemberService.getMember(userId).getData();
+        if(member.getBindingFlag()!=1){
+            //绑定商户
+            AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto();
+            appMemberBindingDto.setShopId(merNewOrderDto.getShopId());
+            appMemberBindingDto.setUserId(userId);
+            appMemberBindingDto.setBindingFlag(1);
+            remoteMemberService.updateMemberBinding(appMemberBindingDto);
+        }
+    }
+
+
+    /**
+     *
+     * @param merOrderPageDto
+     * @return
+     */
+    @Override
+    public List<MerOrderPageVo> pageMerOrder(Page page, MerOrderPageDto merOrderPageDto){
+        List<MerOrderPageVo> merOrderPageVoList = orderMapper.pageMerOrder(page, merOrderPageDto);
+        return merOrderPageVoList;
     }
 }
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/ShoppingCartServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/ShoppingCartServiceImpl.java
index 38b8e51..ea1bfdb 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/ShoppingCartServiceImpl.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/ShoppingCartServiceImpl.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.order.domain.vo.AppShoppingCartVo;
 import com.ruoyi.system.api.domain.dto.AppBaseBathDto;
 import com.ruoyi.order.domain.dto.AppShoppingCartAddDto;
 import com.ruoyi.order.domain.dto.AppShoppingCartChangeDto;
@@ -17,6 +18,7 @@
 
 import javax.annotation.Resource;
 import java.util.Date;
+import java.util.List;
 
 /**
  * <p>
@@ -41,7 +43,7 @@
      */
     @Override
     public void addShoppingCart(AppShoppingCartAddDto appShoppingCartAddDto){
-        Long goodsId = appShoppingCartAddDto.getGoodsId();
+        String goodsId = appShoppingCartAddDto.getGoodsId();
         Goods goods = goodsService.getById(goodsId);
         if(goods.getGoodsStatus()!=1){
             throw new ServiceException(AppErrorConstant.GOODS_DOWN);
@@ -70,14 +72,13 @@
      */
     @Override
     public void changeShoppingCart(AppShoppingCartChangeDto appShoppingCartChangeDto){
-        Long goodsId = appShoppingCartChangeDto.getGoodsId();
+        Long shoppingCartId = appShoppingCartChangeDto.getShoppingCartId();
+        ShoppingCart shoppingCart = this.getById(shoppingCartId);
+        String goodsId = shoppingCart.getGoodsId();
         Goods goods = goodsService.getById(goodsId);
         if(goods.getGoodsStatus()!=1){
             throw new ServiceException(AppErrorConstant.GOODS_DOWN);
         }
-        LambdaQueryWrapper<ShoppingCart> queryWrapper = Wrappers.lambdaQuery();
-        queryWrapper.eq(ShoppingCart::getDelFlag, 0).eq(ShoppingCart::getGoodsId, goodsId);
-        ShoppingCart shoppingCart = this.getOne(queryWrapper,false);
         shoppingCart.setBuyNum(appShoppingCartChangeDto.getBuyNum());
         shoppingCart.setUpdateTime(new Date());
         this.saveOrUpdate(shoppingCart);
@@ -92,4 +93,15 @@
         String ids = appBaseBathDto.getIds();
         shoppingCartMapper.deleteShoppingCartByIds(ids);
     }
+
+    /**
+     *
+     * @param userId
+     * @param shopId
+     * @return
+     */
+    @Override
+    public List<AppShoppingCartVo> listShoppingCartVo(Long userId, Long shopId){
+        return shoppingCartMapper.listShoppingCartVo(userId, shopId);
+    }
 }
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java
index 367d1e8..86fd0b9 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java
@@ -108,4 +108,11 @@
      */
     void createNewOrder(MerNewOrderDto merNewOrderDto);
 
+    /**
+     *
+     * @param merOrderPageDto
+     * @return
+     */
+    List<MerOrderPageVo> pageMerOrder(Page page,MerOrderPageDto merOrderPageDto);
+
 }
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/ShoppingCartService.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/ShoppingCartService.java
index c99257d..1fab16a 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/ShoppingCartService.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/ShoppingCartService.java
@@ -1,10 +1,13 @@
 package com.ruoyi.order.service.order;
 
+import com.ruoyi.order.domain.vo.AppShoppingCartVo;
 import com.ruoyi.system.api.domain.dto.AppBaseBathDto;
 import com.ruoyi.order.domain.dto.AppShoppingCartAddDto;
 import com.ruoyi.order.domain.dto.AppShoppingCartChangeDto;
 import com.ruoyi.order.domain.pojo.order.ShoppingCart;
 import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
 
 /**
  * <p>
@@ -33,4 +36,12 @@
      * @param appBaseBathDto
      */
     void deleteShoppingCart(AppBaseBathDto appBaseBathDto);
+
+    /**
+     *
+     * @param userId
+     * @param shopId
+     * @return
+     */
+    List<AppShoppingCartVo> listShoppingCartVo(Long userId, Long shopId);
 }
diff --git a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/goods/GoodsMapper.xml b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/goods/GoodsMapper.xml
index 25107d7..1fcebd4 100644
--- a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/goods/GoodsMapper.xml
+++ b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/goods/GoodsMapper.xml
@@ -188,7 +188,7 @@
         FROM t_goods tg
         INNER JOIN t_goods_total tgt ON tg.goods_id = tgt.goods_id
         LEFT JOIN t_goods_file tgf ON tg.goods_id = tgf.goods_id AND tgf.del_flag = 0 AND tgf.file_type = 1
-        LEFT JOIN t_shop_goods tsg ON tg.goods_id = tsg.goods_id AND tsg.shop_id = #{shopId}
+        LEFT JOIN t_shop_goods tsg ON tg.goods_id = tsg.goods_id AND tsg.shop_id = #{param.shopId}
         WHERE tg.del_flag = 0 AND tg.goods_status = 1
         <if test="param.goodsType!=null and param.goodsType != ''">
             AND tg.goods_type = #{param.goodsType}
@@ -242,7 +242,7 @@
         tg.goods_tags goodsNurses
         FROM t_goods tg
         LEFT JOIN t_goods_file tgf ON tg.goods_id = tgf.goods_id AND tgf.del_flag = 0 AND tgf.file_type = 1
-        LEFT JOIN t_shop_goods tsg ON tg.goods_id = tsg.goods_id AND tsg.shop_id = #{shopId}
+        LEFT JOIN t_shop_goods tsg ON tg.goods_id = tsg.goods_id AND tsg.shop_id = #{param.shopId}
         WHERE tg.del_flag = 0 AND tg.goods_status = 1
         <if test="param.keyword!=null and param.keyword != ''">
             AND tg.goods_name LIKE CONCAT('%',#{param.keyword},'%')
@@ -272,7 +272,7 @@
         FROM t_goods tg
         INNER JOIN t_activity_goods tag ON tg.goods_id = tag.goods_id
         LEFT JOIN t_goods_file tgf ON tg.goods_id = tgf.goods_id AND tgf.del_flag = 0 AND tgf.file_type = 1
-        LEFT JOIN t_shop_goods tsg ON tg.goods_id = tsg.goods_id AND tsg.shop_id = #{shopId}
+        LEFT JOIN t_shop_goods tsg ON tg.goods_id = tsg.goods_id AND tsg.shop_id = #{param.shopId}
         WHERE tg.del_flag = 0 AND tg.goods_status = 1
         <if test="param.keyword!=null and param.keyword != ''">
             AND tg.goods_name LIKE CONCAT('%',#{param.keyword},'%')
@@ -301,7 +301,7 @@
         IFNULL(tsg.service_num,tg.service_num) serviceNum
         FROM t_goods tg
         LEFT JOIN t_goods_file tgf ON tg.goods_id = tgf.goods_id AND tgf.del_flag = 0 AND tgf.file_type = 1
-        LEFT JOIN t_shop_goods tsg ON tg.goods_id = tsg.goods_id AND tsg.shop_id = #{shopId}
+        LEFT JOIN t_shop_goods tsg ON tg.goods_id = tsg.goods_id AND tsg.shop_id = #{param.shopId}
         WHERE tg.del_flag = 0 AND tg.goods_status = 1
         <if test="param.goodsType != null">
             AND tg.goods_type = #{param.goodsType}
diff --git a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
index 9d5148c..4aaec38 100644
--- a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
+++ b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -44,6 +44,24 @@
         </collection>
     </resultMap>
 
+    <resultMap id="merOrderResultMap" type="com.ruoyi.order.domain.vo.MerOrderPageVo">
+        <result column="userId" property="userId"/>
+        <result column="orderId" property="orderId"/>
+        <result column="orderStatus" property="orderStatus"/>
+        <result column="orderNo" property="orderNo"/>
+        <result column="orderGoodsMoney" property="orderGoodsMoney"/>
+        <result column="couponDiscount" property="couponDiscount"/>
+        <result column="receivableMoney" property="receivableMoney"/>
+        <result column="receivableDeposit" property="receivableDeposit"/>
+        <result column="payMoney" property="payMoney"/>
+        <result column="orderRemark" property="orderRemark" />
+        <collection property="merOrderGoodsVoList" ofType="com.ruoyi.order.domain.vo.MerOrderGoodsPageVo">
+            <result column="goodsName" property="goodsName"/>
+            <result column="goodsType" property="goodsType"/>
+            <result column="buyNum" property="buyNum"/>
+        </collection>
+    </resultMap>
+
     <sql id="selectOrderVo">
         select order_id, del_flag, order_status, order_no, order_from, shop_id, user_id, order_money, coupon_money, discount_money, receivable_money, pay_type, pay_money, online_pay_money, offline_pay_money, order_remark, goods_info, create_time, pay_time, use_time, cancel_time, use_user_id from t_order
     </sql>
@@ -211,4 +229,38 @@
         WHERE toc.del_flag = 0 AND toc.user_id = #{userId} AND toc.orderStatus = 2 AND toc.close_flag = 0
         ORDER BY toc.create_time DESC
     </select>
+
+    <select id="pageMerOrder" resultMap="merOrderResultMap">
+        SELECT
+        toc.user_id userId,
+        toc.order_id orderId,
+        toc.order_no orderNo,
+        toc.order_status orderStatus,
+        toc.order_money orderGoodsMoney,
+        toc.coupon_money couponDiscount,
+        toc.receivable_money receivableMoney,
+        toc.receivable_deposit receivableDeposit,
+        toc.pay_money payMoney,
+        toc.order_remark orderRemark,
+        tg.goods_name goodsName,
+        tog.goods_type goodsType,
+        tog.buy_num buyNum
+        FROM t_order toc
+        INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id
+        INNER JOIN t_goods tg ON tg.goods_id = tog.goods_id
+        WHERE toc.del_flag = 0
+        <if test="param.type != null and param.type ==1 ">
+            AND (toc.order_status = 2 OR toc.order_status = 3)
+        </if>
+        <if test="param.type != null and param.type ==2 ">
+            AND toc.order_status = 2
+        </if>
+        <if test="param.type != null and param.type ==3 ">
+            AND toc.order_status = 3
+        </if>
+        <if test="param.keyword != null and param.keyword != ''">
+            AND (toc.order_no LIKE CONCAT('%',#{param.keyword},'%') OR tog.goods_name LIKE CONCAT('%',#{param.keyword},'%'))
+        </if>
+        ORDER BY toc.create_time DESC
+    </select>
 </mapper>
diff --git a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/ShoppingCartMapper.xml b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/ShoppingCartMapper.xml
index 3e450e0..28ca977 100644
--- a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/ShoppingCartMapper.xml
+++ b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/ShoppingCartMapper.xml
@@ -79,4 +79,27 @@
         </foreach>
     </delete>
 
+    <select id="listShoppingCartVo" resultType="com.ruoyi.order.domain.vo.AppShoppingCartVo">
+        SELECT
+        tg.goods_id goodsId,
+        tg.goods_name goodsName,
+        tg.goods_introduction goodsIntroduction,
+        tg.goods_type goodsType,
+        CASE tg.goods_type
+        WHEN 1 THEN "周期"
+        WHEN 2 THEN "服务"
+        WHEN 3 THEN "体验"
+        WHEN 4 THEN "单品"
+        END goodsTag,
+        IFNULL(tsg.sales_price,tg.sales_price) salesPrice,
+        tgf.file_url goodsPicture,
+        tg.goods_nurses goodsNurses,
+        buy_num buyNum
+        FROM t_shopping_cart tsc
+        INNER JOIN t_goods tg ON tsc.goods_id = tg.goods_id
+        LEFT JOIN t_goods_file tgf ON tg.goods_id = tgf.goods_id AND tgf.del_flag = 0 AND tgf.file_type = 1
+        LEFT JOIN t_shop_goods tsg ON tg.goods_id = tsg.goods_id AND tsg.shop_id = #{shopId}
+        WHERE tg.del_flag = 0 AND tsc.shop_id = #{shopId} AND tsc.user_id = #{userId} AND tg.del_flag = 0 AND tg.goods_status = 1 AND tg.recommend_flag = 1
+        ORDER BY tg.create_time DESC
+    </select>
 </mapper>
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/business/MerTaskController.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/business/MerTaskController.java
new file mode 100644
index 0000000..fa406c1
--- /dev/null
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/business/MerTaskController.java
@@ -0,0 +1,83 @@
+package com.ruoyi.shop.controller.business;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.shop.domain.dto.MerCreateMemberTaskDto;
+import com.ruoyi.shop.domain.dto.MerFollowMemberTaskDto;
+import com.ruoyi.shop.domain.dto.MerMemberTaskPageDto;
+import com.ruoyi.shop.domain.vo.MerMemberTaskPageVo;
+import com.ruoyi.shop.domain.vo.MerMemberTaskRecordPageVo;
+import com.ruoyi.shop.service.task.MemberTaskRecordService;
+import com.ruoyi.shop.service.task.MemberTaskService;
+import com.ruoyi.system.api.domain.poji.member.Member;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @author jqs34
+ * @ClassName MerTaskController
+ * @description: TODO
+ * @date 2023年05月06日
+ * @version: 1.0
+ */
+@Api(value = "商户端会员相关接口", tags = "商户端会员相关接口", description = "商户端会员相关接口")
+@RestController
+@RequestMapping("/mer/task")
+public class MerTaskController {
+
+    @Autowired
+    private MemberTaskService memberTaskService;
+
+    @Autowired
+    private MemberTaskRecordService memberTaskRecordService;
+
+    @RequestMapping(value = "/pageMerMemberTask", method = RequestMethod.POST)
+    @ApiOperation(value = "分页获取商户会员跟进任务列表")
+    public R<Page<MerMemberTaskPageVo>> pageMerMemberTask(@RequestBody MerMemberTaskPageDto merMemberTaskPageDto) {
+        Long userId = SecurityUtils.getUserId();
+        merMemberTaskPageDto.setUserId(userId);
+        Page<MerMemberTaskPageVo> page = new Page<>();
+        page.setSize(merMemberTaskPageDto.getPageSize());
+        page.setCurrent(merMemberTaskPageDto.getPageNum());
+        List<MerMemberTaskPageVo> merMemberTaskPageVoList = memberTaskService.pageMerMemberTask(page,merMemberTaskPageDto);
+        return R.ok(page.setRecords(merMemberTaskPageVoList));
+    }
+
+    @RequestMapping(value = "/pageMerMemberTaskRecord", method = RequestMethod.POST)
+    @ApiOperation(value = "分页获取商户会员跟进任务记录列表")
+    public R<Page<MerMemberTaskRecordPageVo>> pageMerMemberTaskRecord(@RequestBody MerMemberTaskPageDto merMemberTaskPageDto) {
+        Long userId = SecurityUtils.getUserId();
+        merMemberTaskPageDto.setUserId(userId);
+        Page<MerMemberTaskRecordPageVo> page = new Page<>();
+        page.setSize(merMemberTaskPageDto.getPageSize());
+        page.setCurrent(merMemberTaskPageDto.getPageNum());
+        List<MerMemberTaskRecordPageVo> merMemberTaskRecordPageVoList = memberTaskRecordService.pageMerMemberTaskRecord(page,merMemberTaskPageDto);
+        return R.ok(page.setRecords(merMemberTaskRecordPageVoList));
+    }
+
+    @RequestMapping(value = "/createMemberTask", method = RequestMethod.POST)
+    @ApiOperation(value = "新建会员跟进任务")
+    public R createMemberTask(@RequestBody MerCreateMemberTaskDto merCreateMemberTaskDto) {
+        Long userId = SecurityUtils.getUserId();
+        merCreateMemberTaskDto.setUserId(userId);
+        memberTaskService.createMemberTask(merCreateMemberTaskDto);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/followMemberTask", method = RequestMethod.POST)
+    @ApiOperation(value = "任务跟进")
+    public R followMemberTask(@RequestBody MerFollowMemberTaskDto merFollowMemberTaskDto) {
+        Long userId = SecurityUtils.getUserId();
+        merFollowMemberTaskDto.setUserId(userId);
+        memberTaskService.followMemberTask(merFollowMemberTaskDto);
+        return R.ok();
+    }
+}
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/miniapp/AppHomeController.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/miniapp/AppHomeController.java
index a3e5d27..efea8ee 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/miniapp/AppHomeController.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/miniapp/AppHomeController.java
@@ -11,6 +11,7 @@
 import com.ruoyi.system.api.domain.poji.member.Member;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -27,6 +28,7 @@
 @Api(value = "小程序首页相关接口", tags = "小程序首页相关接口", description = "小程序首页相关接口")
 @RestController
 @RequestMapping("/app/home")
+@Log4j2
 public class AppHomeController {
 
 
@@ -40,7 +42,9 @@
     @ApiOperation(value = "获取最近商户")
     public R<AppNearbyShopVo> getNearbyShop(@RequestBody AppNearbyShopDto appNearbyShopDto) {
         Long userId = SecurityUtils.getUserId();
+        log.info("userId"+userId);
         Member member = memberService.getMember(userId).getData();
+        log.info("member"+member);
         appNearbyShopDto.setUserId(userId);
         AppNearbyShopVo appNearbyShopVo = shopService.getNearbyShop(appNearbyShopDto,member);
         return R.ok(appNearbyShopVo);
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MerCreateMemberTaskDto.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MerCreateMemberTaskDto.java
new file mode 100644
index 0000000..d420b2c
--- /dev/null
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MerCreateMemberTaskDto.java
@@ -0,0 +1,29 @@
+package com.ruoyi.shop.domain.dto;
+
+import com.ruoyi.system.api.domain.dto.MerBaseDto;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author jqs34
+ * @ClassName merCreateMemberTaskDto
+ * @description: TODO
+ * @date 2023年05月06日
+ * @version: 1.0
+ */
+@Data
+public class MerCreateMemberTaskDto extends MerBaseDto {
+
+    @ApiModelProperty(name = "跟进会员用户id")
+    private Long memberUserId;
+
+    @ApiModelProperty(name = "任务时间")
+    private Date taskDate;
+
+    @ApiModelProperty(name = "任务内容")
+    private String taskContent;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MerFollowMemberTaskDto.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MerFollowMemberTaskDto.java
new file mode 100644
index 0000000..01281c3
--- /dev/null
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MerFollowMemberTaskDto.java
@@ -0,0 +1,50 @@
+package com.ruoyi.shop.domain.dto;
+
+import com.ruoyi.system.api.domain.dto.MerBaseDto;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author jqs34
+ * @ClassName MerFollowMemberTask
+ * @description: TODO
+ * @date 2023年05月06日
+ * @version: 1.0
+ */
+@Data
+public class MerFollowMemberTaskDto extends MerBaseDto {
+
+    @ApiModelProperty(name = "任务id")
+    private String taskId;
+
+    @ApiModelProperty("跟踪类型1电话2手动")
+    private Integer followType;
+
+    @ApiModelProperty("拨打电话")
+    private String callPhone;
+
+    @ApiModelProperty("电话时间")
+    private Date callTime;
+
+    @ApiModelProperty("跟踪内容")
+    private String followContent;
+
+    @ApiModelProperty("跟进图片地址 多个,号隔开")
+    private String picture;
+
+    @ApiModelProperty("跟进视频地址 多个,号隔开")
+    private String video;
+
+    @ApiModelProperty("跟进音频地址 多个,号隔开")
+    private String audio;
+
+    @ApiModelProperty("下次任务时间")
+    private Date nextTaskDate;
+
+    @ApiModelProperty("下次任务内容")
+    private String nextTaskContent;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MerMemberTaskPageDto.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MerMemberTaskPageDto.java
new file mode 100644
index 0000000..3069d90
--- /dev/null
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MerMemberTaskPageDto.java
@@ -0,0 +1,19 @@
+package com.ruoyi.shop.domain.dto;
+
+import com.ruoyi.system.api.domain.dto.MerPageDto;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author jqs34
+ * @ClassName MerMemberTaskPageDto
+ * @description: TODO
+ * @date 2023年05月06日
+ * @version: 1.0
+ */
+@Data
+public class MerMemberTaskPageDto extends MerPageDto {
+
+    @ApiModelProperty(name = "会员用户id")
+    private Long memberUserId;
+}
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/pojo/task/MemberTaskRecord.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/pojo/task/MemberTaskRecord.java
index b7a2774..709d20a 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/pojo/task/MemberTaskRecord.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/pojo/task/MemberTaskRecord.java
@@ -46,7 +46,7 @@
     @TableField("user_id")
     private Long userId;
     /**
-     * 跟踪类型
+     * 跟踪类型1电话2手动
      */
     @TableField("follow_type")
     private Integer followType;
@@ -61,6 +61,11 @@
     @TableField("follow_content")
     private String followContent;
 
+    /**
+     * 拨打电话
+     */
+    @TableField("call_phone")
+    private String callPhone;
 
     @Override
     protected Serializable pkVal() {
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MerMemberTaskPageVo.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MerMemberTaskPageVo.java
new file mode 100644
index 0000000..c1add92
--- /dev/null
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MerMemberTaskPageVo.java
@@ -0,0 +1,32 @@
+package com.ruoyi.shop.domain.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author jqs34
+ * @ClassName MerMemberTaskPageVo
+ * @description: TODO
+ * @date 2023年05月06日
+ * @version: 1.0
+ */
+@Data
+public class MerMemberTaskPageVo {
+
+    @ApiModelProperty(name = "任务id")
+    private String taskId;
+
+    @ApiModelProperty(name = "任务时间")
+    private Date taskDate;
+
+    @ApiModelProperty("任务内容")
+    private String taskContent;
+
+    @ApiModelProperty("任务内容")
+    private Integer todayFlag;
+
+}
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MerMemberTaskRecordPageVo.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MerMemberTaskRecordPageVo.java
new file mode 100644
index 0000000..a35bcdc
--- /dev/null
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MerMemberTaskRecordPageVo.java
@@ -0,0 +1,47 @@
+package com.ruoyi.shop.domain.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author jqs34
+ * @ClassName MerMemberTaskRecordPageVo
+ * @description: TODO
+ * @date 2023年05月06日
+ * @version: 1.0
+ */
+@Data
+public class MerMemberTaskRecordPageVo {
+
+    @ApiModelProperty(name = "跟进id")
+    private Long followId;
+
+    @ApiModelProperty(name = "任务id")
+    private String taskId;
+
+    @ApiModelProperty(name = "任务时间")
+    private Date taskDate;
+
+    @ApiModelProperty("跟踪类型1电话2手动")
+    private Integer followType;
+
+    @ApiModelProperty("电话时间")
+    private Date callTime;
+
+    @ApiModelProperty("跟踪内容")
+    private String followContent;
+
+    @ApiModelProperty("拨打电话")
+    private String callPhone;
+
+    @ApiModelProperty("跟进图片地址 多个,号隔开")
+    private String picture;
+
+    @ApiModelProperty("跟进视频地址 多个,号隔开")
+    private String video;
+
+    @ApiModelProperty("跟进音频地址 多个,号隔开")
+    private String audio;
+}
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/fliter/ParamsAuthFilter.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/fliter/ParamsAuthFilter.java
new file mode 100644
index 0000000..e40d3c9
--- /dev/null
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/fliter/ParamsAuthFilter.java
@@ -0,0 +1,103 @@
+package com.ruoyi.shop.fliter;
+
+
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.core.utils.StringUtils;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.HashMap;
+import java.util.Map;
+
+@Component
+@Log4j2
+public class ParamsAuthFilter implements Filter {
+
+    // 令牌自定义标识
+    //@Value("${token.header}")
+    private String header = "Authorization";
+
+
+    @Override
+    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+        HttpServletRequest request = (HttpServletRequest) servletRequest;
+        HttpServletResponse response = (HttpServletResponse) servletResponse;
+
+        RepeatedlyRequestWrapper wrapper = new RepeatedlyRequestWrapper(request, response);
+        getRequestParams(wrapper);
+
+        ResponseWrapper responseWrapper = new ResponseWrapper(response);
+        filterChain.doFilter(wrapper, responseWrapper);
+
+        // 返回的结果
+        String content = responseWrapper.getTextContent();
+        String requestUrl = request.getRequestURI();
+        log.info("-------------------- Response Data ----------------------");
+        log.info(requestUrl + " -> " + content);
+
+        response.getOutputStream().write(content.getBytes());
+    }
+
+
+    private void getRequestParams(HttpServletRequest request){
+        Map<String, String> params = getUrlParams(request);
+        try {
+            String requestUrl = request.getRequestURI();
+            Map<String, String> urlParams = getUrlParams(request);
+            Map<String, String> bodyParams = getBodyParams(request);
+
+            params.putAll(urlParams);
+            params.putAll(bodyParams);
+            log.info("-------------------- request header ----------------------");
+            log.info(header + " -> " + request.getHeader(header));
+            log.info("-------------------- request params ----------------------");
+            log.info(requestUrl + " -> " + JSONObject.toJSONString(params));
+
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+    private Map<String, String> getBodyParams(HttpServletRequest request) throws IOException {
+        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(request.getInputStream()));
+        StringBuilder stringBuilder = new StringBuilder();
+        String buffer = "";
+        while((buffer  = bufferedReader.readLine()) != null){
+            stringBuilder.append(buffer);
+        }
+        String requestBodyStr = stringBuilder.toString();
+        if(StringUtils.isNotBlank(requestBodyStr)){
+            return JSONObject.parseObject(stringBuilder.toString(), Map.class);
+        }
+        return new HashMap<>();
+    }
+
+    private Map<String, String> getUrlParams(HttpServletRequest request){
+        String queryParams = "";
+        try {
+            queryParams = request.getQueryString();
+            if(StringUtils.isNotBlank(queryParams)) {
+                queryParams = URLDecoder.decode(request.getQueryString(), "utf-8");
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        Map<String, String> result = new HashMap<>();
+        if(StringUtils.isNotBlank(queryParams)) {
+            String[] spilt = queryParams.split("&");
+            for (String s : spilt) {
+                int index = s.indexOf("=");
+                result.put(s.substring(0, index), s.substring(index + 1));
+            }
+        }
+        return result;
+    }
+}
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/fliter/RepeatedlyRequestWrapper.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/fliter/RepeatedlyRequestWrapper.java
new file mode 100644
index 0000000..4702d76
--- /dev/null
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/fliter/RepeatedlyRequestWrapper.java
@@ -0,0 +1,111 @@
+package com.ruoyi.shop.fliter;
+
+import lombok.extern.log4j.Log4j2;
+import org.apache.commons.lang3.exception.ExceptionUtils;
+
+import javax.servlet.ReadListener;
+import javax.servlet.ServletInputStream;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.io.*;
+import java.nio.charset.Charset;
+
+/**
+ * 构建可重复读取inputStream的request
+ *
+ * @author linzhang
+ */
+@Log4j2
+public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper
+{
+    private final byte[] body;
+
+    public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException
+    {
+        super(request);
+        request.setCharacterEncoding("UTF-8");
+        response.setCharacterEncoding("UTF-8");
+
+        body = getBodyString(request).getBytes("UTF-8");
+    }
+
+    public static String getBodyString(ServletRequest request)
+    {
+        StringBuilder sb = new StringBuilder();
+        BufferedReader reader = null;
+        try (InputStream inputStream = request.getInputStream())
+        {
+            reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));
+            String line = "";
+            while ((line = reader.readLine()) != null)
+            {
+                sb.append(line);
+            }
+        }
+        catch (IOException e)
+        {
+            log.warn("getBodyString出现问题!");
+        }
+        finally
+        {
+            if (reader != null)
+            {
+                try
+                {
+                    reader.close();
+                }
+                catch (IOException e)
+                {
+                    log.error(ExceptionUtils.getMessage(e));
+                }
+            }
+        }
+        return sb.toString();
+    }
+
+    @Override
+    public BufferedReader getReader() throws IOException
+    {
+        return new BufferedReader(new InputStreamReader(getInputStream()));
+    }
+
+    @Override
+    public ServletInputStream getInputStream() throws IOException
+    {
+        final ByteArrayInputStream bais = new ByteArrayInputStream(body);
+        return new ServletInputStream()
+        {
+            @Override
+            public int read() throws IOException
+            {
+                return bais.read();
+            }
+
+            @Override
+            public int available() throws IOException
+            {
+                return body.length;
+            }
+
+            @Override
+            public boolean isFinished()
+            {
+                return false;
+            }
+
+            @Override
+            public boolean isReady()
+            {
+                return false;
+            }
+
+            @Override
+            public void setReadListener(ReadListener readListener)
+            {
+
+            }
+        };
+    }
+}
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/fliter/ResponseWrapper.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/fliter/ResponseWrapper.java
new file mode 100644
index 0000000..52a6f55
--- /dev/null
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/fliter/ResponseWrapper.java
@@ -0,0 +1,63 @@
+package com.ruoyi.shop.fliter;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.WriteListener;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+public class ResponseWrapper extends HttpServletResponseWrapper {
+
+    private ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+    private PrintWriter printWriter = new PrintWriter(outputStream);
+
+    public ResponseWrapper(HttpServletResponse response) {
+        super(response);
+    }
+
+    @Override
+    public PrintWriter getWriter() throws IOException {
+        return printWriter;
+    }
+
+    @Override
+    public ServletOutputStream getOutputStream() throws IOException {
+        return new ServletOutputStream() {
+            @Override
+            public boolean isReady() {
+                return false;
+            }
+
+            @Override
+            public void setWriteListener(WriteListener listener) {
+
+            }
+
+            @Override
+            public void write(int b) throws IOException {
+                outputStream.write(b);
+            }
+        };
+    }
+    public void flush(){
+        try {
+            printWriter.flush();
+            printWriter.close();
+            outputStream.flush();
+            outputStream.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public ByteArrayOutputStream getByteArrayOutputStream(){
+        return outputStream;
+    }
+
+    public String getTextContent() {
+        flush();
+        return outputStream.toString();
+    }
+}
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/task/MemberTaskMapper.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/task/MemberTaskMapper.java
index d7af317..2c91b05 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/task/MemberTaskMapper.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/task/MemberTaskMapper.java
@@ -1,7 +1,14 @@
 package com.ruoyi.shop.mapper.task;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.shop.domain.dto.MerMemberTaskPageDto;
 import com.ruoyi.shop.domain.pojo.task.MemberTask;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.shop.domain.vo.MerMemberTaskPageVo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.web.bind.annotation.PostMapping;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +20,11 @@
  */
 public interface MemberTaskMapper extends BaseMapper<MemberTask> {
 
+    /**
+     *
+     * @param page
+     * @param merMemberTaskPageDto
+     * @return
+     */
+    List<MerMemberTaskPageVo> pageMerMemberTask(Page page, @Param("param") MerMemberTaskPageDto merMemberTaskPageDto);
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/task/MemberTaskRecordMapper.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/task/MemberTaskRecordMapper.java
index 4510a50..d454d58 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/task/MemberTaskRecordMapper.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/task/MemberTaskRecordMapper.java
@@ -1,7 +1,13 @@
 package com.ruoyi.shop.mapper.task;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.shop.domain.dto.MerMemberTaskPageDto;
 import com.ruoyi.shop.domain.pojo.task.MemberTaskRecord;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.shop.domain.vo.MerMemberTaskRecordPageVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +19,11 @@
  */
 public interface MemberTaskRecordMapper extends BaseMapper<MemberTaskRecord> {
 
+    /**
+     *
+     * @param page
+     * @param merMemberTaskPageDto
+     * @return
+     */
+    List<MerMemberTaskRecordPageVo> pageMerMemberTaskRecord(Page page, @Param("param") MerMemberTaskPageDto merMemberTaskPageDto);
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
index e02f88b..9e31955 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
@@ -12,8 +12,10 @@
 import com.ruoyi.shop.service.task.ShopFileService;
 import com.ruoyi.shop.util.CodeFactoryUtil;
 import com.ruoyi.system.api.RemoteConfigService;
+import com.ruoyi.system.api.RemoteMemberService;
 import com.ruoyi.system.api.RemoteOrderService;
 import com.ruoyi.system.api.RemoteUserService;
+import com.ruoyi.system.api.domain.dto.AppMemberBindingDto;
 import com.ruoyi.system.api.domain.poji.shop.Shop;
 import com.ruoyi.system.api.domain.poji.config.SysTag;
 import com.ruoyi.system.api.domain.poji.member.Member;
@@ -56,6 +58,9 @@
 
     @Resource
     private RemoteConfigService configService;
+
+    @Resource
+    private RemoteMemberService remoteMemberService;
 
     @Resource
     private RemoteUserService sysUserService;
@@ -339,6 +344,13 @@
             //获取附近商户
             shop = this.getById(1L);
         }
+        if(member.getBindingFlag()!=1){
+            AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto();
+            appMemberBindingDto.setShopId(shop.getShopId());
+            appMemberBindingDto.setUserId(member.getUserId());
+            appMemberBindingDto.setBindingFlag(0);
+            remoteMemberService.updateMemberBinding(appMemberBindingDto);
+        }
         appNearbyShopVo.setShopId(shop.getShopId());
         appNearbyShopVo.setShopName(shop.getShopName());
         appNearbyShopVo.setShopAddress(shop.getShopAreaName()+shop.getShopAddress());
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/MemberTaskRecordServiceImpl.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/MemberTaskRecordServiceImpl.java
index dcc563a..5521fab 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/MemberTaskRecordServiceImpl.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/MemberTaskRecordServiceImpl.java
@@ -1,10 +1,19 @@
 package com.ruoyi.shop.service.impl.task;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.shop.domain.dto.MerMemberTaskPageDto;
 import com.ruoyi.shop.domain.pojo.task.MemberTaskRecord;
+import com.ruoyi.shop.domain.pojo.task.TaskFile;
+import com.ruoyi.shop.domain.vo.MerMemberTaskRecordPageVo;
 import com.ruoyi.shop.mapper.task.MemberTaskRecordMapper;
 import com.ruoyi.shop.service.task.MemberTaskRecordService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.shop.service.task.TaskFileService;
 import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.StringJoiner;
 
 /**
  * <p>
@@ -17,4 +26,53 @@
 @Service
 public class MemberTaskRecordServiceImpl extends ServiceImpl<MemberTaskRecordMapper, MemberTaskRecord> implements MemberTaskRecordService {
 
+    @Resource
+    private MemberTaskRecordMapper memberTaskRecordMapper;
+
+    @Resource
+    private TaskFileService taskFileService;
+
+
+    /**
+     *
+     * @param page
+     * @param merMemberTaskPageDto
+     * @return
+     */
+    @Override
+    public List<MerMemberTaskRecordPageVo> pageMerMemberTaskRecord(Page page, MerMemberTaskPageDto merMemberTaskPageDto){
+        List<MerMemberTaskRecordPageVo> merMemberTaskRecordPageVoList = memberTaskRecordMapper.pageMerMemberTaskRecord(page, merMemberTaskPageDto);
+        if(merMemberTaskRecordPageVoList!=null&&!merMemberTaskRecordPageVoList.isEmpty()){
+            Long followId;
+            List<TaskFile> taskFileList;
+            String picture;
+            String video;
+            String audio;
+            for(MerMemberTaskRecordPageVo merMemberTaskRecordPageVo : merMemberTaskRecordPageVoList){
+                followId = merMemberTaskRecordPageVo.getFollowId();
+                taskFileList = taskFileService.listByFollowIdAndFollowType(followId,1);
+                picture = convertFileListToString(taskFileList);
+                taskFileList = taskFileService.listByFollowIdAndFollowType(followId,2);
+                video = convertFileListToString(taskFileList);
+                taskFileList = taskFileService.listByFollowIdAndFollowType(followId,3);
+                audio = convertFileListToString(taskFileList);
+                merMemberTaskRecordPageVo.setPicture(picture);
+                merMemberTaskRecordPageVo.setVideo(video);
+                merMemberTaskRecordPageVo.setAudio(audio);
+            }
+        }
+        return merMemberTaskRecordPageVoList;
+    }
+
+    private String convertFileListToString(List<TaskFile> taskFileList){
+        StringJoiner sj = new StringJoiner(",");
+        if(taskFileList!=null&&!taskFileList.isEmpty()){
+            for(TaskFile taskFile : taskFileList){
+                sj.add(taskFile.getFileUrl());
+            }
+            return sj.toString();
+        }else{
+            return null;
+        }
+    }
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/MemberTaskServiceImpl.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/MemberTaskServiceImpl.java
index 6294833..880c02a 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/MemberTaskServiceImpl.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/MemberTaskServiceImpl.java
@@ -1,10 +1,27 @@
 package com.ruoyi.shop.service.impl.task;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.utils.DateUtils;
+import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.core.utils.uuid.IdUtils;
+import com.ruoyi.shop.domain.dto.MerCreateMemberTaskDto;
+import com.ruoyi.shop.domain.dto.MerFollowMemberTaskDto;
+import com.ruoyi.shop.domain.dto.MerMemberTaskPageDto;
 import com.ruoyi.shop.domain.pojo.task.MemberTask;
+import com.ruoyi.shop.domain.pojo.task.MemberTaskRecord;
+import com.ruoyi.shop.domain.pojo.task.TaskFile;
+import com.ruoyi.shop.domain.vo.MerMemberTaskPageVo;
 import com.ruoyi.shop.mapper.task.MemberTaskMapper;
+import com.ruoyi.shop.service.task.MemberTaskRecordService;
 import com.ruoyi.shop.service.task.MemberTaskService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.system.api.RemoteMemberService;
+import com.ruoyi.system.api.domain.poji.member.Member;
 import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
 
 /**
  * <p>
@@ -17,4 +34,119 @@
 @Service
 public class MemberTaskServiceImpl extends ServiceImpl<MemberTaskMapper, MemberTask> implements MemberTaskService {
 
+    @Resource
+    private MemberTaskMapper memberTaskMapper;
+
+    @Resource
+    private MemberTaskRecordService memberTaskRecordService;
+
+    @Resource
+    private RemoteMemberService remoteMemberService;
+    /**
+     *
+     * @param page
+     * @param merMemberTaskPageDto
+     * @return
+     */
+    @Override
+    public List<MerMemberTaskPageVo> pageMerMemberTask(Page page, MerMemberTaskPageDto merMemberTaskPageDto){
+        String today = DateUtils.parseDateToStr("YYYY-MM-DD",new Date());
+        List<MerMemberTaskPageVo> merMemberTaskPageVoList = memberTaskMapper.pageMerMemberTask(page, merMemberTaskPageDto);
+        if(merMemberTaskPageVoList!=null&&!merMemberTaskPageVoList.isEmpty()){
+            Date taskDate;
+            for(MerMemberTaskPageVo merMemberTaskPageVo : merMemberTaskPageVoList){
+                taskDate = merMemberTaskPageVo.getTaskDate();
+                if(today.equals(DateUtils.parseDateToStr("YYYY-MM-DD",taskDate))){
+                    merMemberTaskPageVo.setTodayFlag(1);
+                }else{
+                    merMemberTaskPageVo.setTodayFlag(0);
+                }
+            }
+        }
+        return merMemberTaskPageVoList;
+    }
+
+    /**
+     *
+     * @param merCreateMemberTaskDto
+     */
+    @Override
+    public void createMemberTask(MerCreateMemberTaskDto merCreateMemberTaskDto){
+        MemberTask memberTask = new MemberTask();
+        String taskId = IdUtils.fastUUID();
+        memberTask.setTaskId(taskId);
+        memberTask.setDelFlag(0);
+        memberTask.setShopId(merCreateMemberTaskDto.getShopId());
+        memberTask.setUserId(merCreateMemberTaskDto.getMemberUserId());
+        memberTask.setTaskDate(merCreateMemberTaskDto.getTaskDate());
+        memberTask.setTaskContent(merCreateMemberTaskDto.getTaskContent());
+        memberTask.setCreateTime(new Date());
+        this.saveOrUpdate(memberTask);
+    }
+
+    /**
+     *
+     * @param merFollowMemberTaskDto
+     */
+    @Override
+    public void followMemberTask(MerFollowMemberTaskDto merFollowMemberTaskDto){
+        MemberTaskRecord memberTaskRecord = new MemberTaskRecord();
+        MemberTask oldMemberTask = this.getById(merFollowMemberTaskDto.getTaskId());
+        memberTaskRecord.setTaskId(merFollowMemberTaskDto.getTaskId());
+        memberTaskRecord.setDelFlag(0);
+        memberTaskRecord.setUserId(oldMemberTask.getUserId());
+        memberTaskRecord.setFollowType(merFollowMemberTaskDto.getFollowType());
+        memberTaskRecord.setCallPhone(merFollowMemberTaskDto.getCallPhone());
+        memberTaskRecord.setCallTime(merFollowMemberTaskDto.getCallTime());
+        memberTaskRecordService.saveOrUpdate(memberTaskRecord);
+        String picture = merFollowMemberTaskDto.getPicture();
+        String video = merFollowMemberTaskDto.getVideo();
+        String audio = merFollowMemberTaskDto.getAudio();
+        String[] strArr;
+        TaskFile taskFile;
+        if(StringUtils.isNotBlank(picture)){
+            strArr = picture.split(",");
+            for(String str : strArr){
+                taskFile = new TaskFile();
+                taskFile.setDelFlag(0);
+                taskFile.setFollowId(memberTaskRecord.getId());
+                taskFile.setFollowFrom(2);
+                taskFile.setFileUrl(str);
+                taskFile.setFileType(1);
+            }
+        }
+        if(StringUtils.isNotBlank(video)){
+            strArr = picture.split(",");
+            for(String str : strArr){
+                taskFile = new TaskFile();
+                taskFile.setDelFlag(0);
+                taskFile.setFollowId(memberTaskRecord.getId());
+                taskFile.setFollowFrom(2);
+                taskFile.setFileUrl(str);
+                taskFile.setFileType(2);
+            }
+        }
+        if(StringUtils.isNotBlank(audio)){
+            strArr = picture.split(",");
+            for(String str : strArr){
+                taskFile = new TaskFile();
+                taskFile.setDelFlag(0);
+                taskFile.setFollowId(memberTaskRecord.getId());
+                taskFile.setFollowFrom(2);
+                taskFile.setFileUrl(str);
+                taskFile.setFileType(3);
+            }
+        }
+        MemberTask memberTask = new MemberTask();
+        String taskId = IdUtils.fastUUID();
+        memberTask.setTaskId(taskId);
+        memberTask.setDelFlag(0);
+        memberTask.setShopId(oldMemberTask.getShopId());
+        memberTask.setUserId(oldMemberTask.getUserId());
+        memberTask.setTaskDate(merFollowMemberTaskDto.getNextTaskDate());
+        memberTask.setTaskContent(merFollowMemberTaskDto.getNextTaskContent());
+        memberTask.setCreateTime(new Date());
+        this.saveOrUpdate(memberTask);
+
+    }
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/TaskFileServiceImpl.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/TaskFileServiceImpl.java
index 42308c5..952847e 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/TaskFileServiceImpl.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/task/TaskFileServiceImpl.java
@@ -1,10 +1,15 @@
 package com.ruoyi.shop.service.impl.task;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.shop.domain.pojo.shop.ShopRelTag;
 import com.ruoyi.shop.domain.pojo.task.TaskFile;
 import com.ruoyi.shop.mapper.task.TaskFileMapper;
 import com.ruoyi.shop.service.task.TaskFileService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * <p>
@@ -17,4 +22,17 @@
 @Service
 public class TaskFileServiceImpl extends ServiceImpl<TaskFileMapper, TaskFile> implements TaskFileService {
 
+
+    /**
+     *
+     * @param followId
+     * @param followType
+     * @return
+     */
+    @Override
+    public List<TaskFile> listByFollowIdAndFollowType(Long followId, Integer followType){
+        LambdaQueryWrapper<TaskFile> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(TaskFile::getDelFlag, 0).eq(TaskFile::getFollowId, followId).eq(TaskFile::getFileType, followType);
+        return this.list(queryWrapper);
+    }
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/MemberTaskRecordService.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/MemberTaskRecordService.java
index c455727..edb3fd0 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/MemberTaskRecordService.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/MemberTaskRecordService.java
@@ -1,7 +1,12 @@
 package com.ruoyi.shop.service.task;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.shop.domain.dto.MerMemberTaskPageDto;
 import com.ruoyi.shop.domain.pojo.task.MemberTaskRecord;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.shop.domain.vo.MerMemberTaskRecordPageVo;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +18,11 @@
  */
 public interface MemberTaskRecordService extends IService<MemberTaskRecord> {
 
+    /**
+     *
+     * @param page
+     * @param merMemberTaskPageDto
+     * @return
+     */
+    List<MerMemberTaskRecordPageVo> pageMerMemberTaskRecord(Page page, MerMemberTaskPageDto merMemberTaskPageDto);
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/MemberTaskService.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/MemberTaskService.java
index 5dd0e70..2dfd768 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/MemberTaskService.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/MemberTaskService.java
@@ -1,7 +1,14 @@
 package com.ruoyi.shop.service.task;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.shop.domain.dto.MerCreateMemberTaskDto;
+import com.ruoyi.shop.domain.dto.MerFollowMemberTaskDto;
+import com.ruoyi.shop.domain.dto.MerMemberTaskPageDto;
 import com.ruoyi.shop.domain.pojo.task.MemberTask;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.shop.domain.vo.MerMemberTaskPageVo;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +20,24 @@
  */
 public interface MemberTaskService extends IService<MemberTask> {
 
+    /**
+     *
+     * @param page
+     * @param merMemberTaskPageDto
+     * @return
+     */
+    List<MerMemberTaskPageVo> pageMerMemberTask(Page page, MerMemberTaskPageDto merMemberTaskPageDto);
+
+    /**
+     *
+     * @param merCreateMemberTaskDto
+     */
+    void createMemberTask(MerCreateMemberTaskDto merCreateMemberTaskDto);
+
+    /**
+     *
+     * @param merFollowMemberTaskDto
+     */
+    void followMemberTask(MerFollowMemberTaskDto merFollowMemberTaskDto);
+
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/TaskFileService.java b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/TaskFileService.java
index 33badf5..42648c1 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/TaskFileService.java
+++ b/ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/task/TaskFileService.java
@@ -3,6 +3,8 @@
 import com.ruoyi.shop.domain.pojo.task.TaskFile;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * <p>
  * 跟进附件 服务类
@@ -13,4 +15,12 @@
  */
 public interface TaskFileService extends IService<TaskFile> {
 
+    /**
+     *
+     * @param followId
+     * @param followType
+     * @return
+     */
+    List<TaskFile> listByFollowIdAndFollowType(Long followId, Integer followType);
+
 }
diff --git a/ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/MemberTaskMapper.xml b/ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/MemberTaskMapper.xml
index a1e1ef3..3199c0c 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/MemberTaskMapper.xml
+++ b/ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/MemberTaskMapper.xml
@@ -77,4 +77,14 @@
         </foreach>
     </delete>
 
+
+    <select id="pageMerMemberTask" resultType="com.ruoyi.shop.domain.vo.MerMemberTaskPageVo">
+        SELECT
+        task_id taskId,
+        task_date taskDate,
+        task_content taskContent
+        FROM t_member_task
+        WHERE delFlag = 0 AND shop_id = #{param.shopId} AND user_id = #{param.memberUserId}
+        ORDER BY tmt.task_date DESC
+    </select>
 </mapper>
diff --git a/ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/MemberTaskRecordMapper.xml b/ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/MemberTaskRecordMapper.xml
index 44bc43e..65556e9 100644
--- a/ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/MemberTaskRecordMapper.xml
+++ b/ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/MemberTaskRecordMapper.xml
@@ -76,4 +76,19 @@
         </foreach>
     </delete>
 
+
+    <select id="pageMerMemberTaskRecord" resultType="com.ruoyi.shop.domain.vo.MerMemberTaskRecordPageVo">
+        SELECT
+        tmtr.id followId,
+        tmtr.task_id taskId,
+        tmt.task_date taskDate,
+        tmtr.followType followType,
+        tmtr.callTime callTime,
+        tmtr.followContent followContent,
+        tmtr.callPhone callPhone
+        FROM t_member_task tmt
+        INNER JOIN t_member_task_record tmtr ON tmtr.task_id = tmt.task_id
+        WHERE delFlag = 0 AND shop_id = #{param.shopId} AND user_id = #{param.memberUserId}
+        ORDER BY tmt.task_date DESC
+    </select>
 </mapper>
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/AppImmediatelyBuyDto.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/AppImmediatelyBuyDto.java
index d00ee71..7f74983 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/AppImmediatelyBuyDto.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/AppImmediatelyBuyDto.java
@@ -15,7 +15,7 @@
 public class AppImmediatelyBuyDto extends AppBaseDto {
 
     @ApiModelProperty(value = "商品id")
-    private Long goodsId;
+    private String goodsId;
 
     @ApiModelProperty(value = "购买数量")
     private Integer buyNum;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/fliter/ParamsAuthFilter.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/fliter/ParamsAuthFilter.java
new file mode 100644
index 0000000..690bcfe
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/fliter/ParamsAuthFilter.java
@@ -0,0 +1,103 @@
+package com.ruoyi.system.fliter;
+
+
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.core.utils.StringUtils;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.HashMap;
+import java.util.Map;
+
+@Component
+@Log4j2
+public class ParamsAuthFilter implements Filter {
+
+    // 令牌自定义标识
+    //@Value("${token.header}")
+    private String header = "Authorization";
+
+
+    @Override
+    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+        HttpServletRequest request = (HttpServletRequest) servletRequest;
+        HttpServletResponse response = (HttpServletResponse) servletResponse;
+
+        RepeatedlyRequestWrapper wrapper = new RepeatedlyRequestWrapper(request, response);
+        getRequestParams(wrapper);
+
+        ResponseWrapper responseWrapper = new ResponseWrapper(response);
+        filterChain.doFilter(wrapper, responseWrapper);
+
+        // 返回的结果
+        String content = responseWrapper.getTextContent();
+        String requestUrl = request.getRequestURI();
+        log.info("-------------------- Response Data ----------------------");
+        log.info(requestUrl + " -> " + content);
+
+        response.getOutputStream().write(content.getBytes());
+    }
+
+
+    private void getRequestParams(HttpServletRequest request){
+        Map<String, String> params = getUrlParams(request);
+        try {
+            String requestUrl = request.getRequestURI();
+            Map<String, String> urlParams = getUrlParams(request);
+            Map<String, String> bodyParams = getBodyParams(request);
+
+            params.putAll(urlParams);
+            params.putAll(bodyParams);
+            log.info("-------------------- request header ----------------------");
+            log.info(header + " -> " + request.getHeader(header));
+            log.info("-------------------- request params ----------------------");
+            log.info(requestUrl + " -> " + JSONObject.toJSONString(params));
+
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+    private Map<String, String> getBodyParams(HttpServletRequest request) throws IOException {
+        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(request.getInputStream()));
+        StringBuilder stringBuilder = new StringBuilder();
+        String buffer = "";
+        while((buffer  = bufferedReader.readLine()) != null){
+            stringBuilder.append(buffer);
+        }
+        String requestBodyStr = stringBuilder.toString();
+        if(StringUtils.isNotBlank(requestBodyStr)){
+            return JSONObject.parseObject(stringBuilder.toString(), Map.class);
+        }
+        return new HashMap<>();
+    }
+
+    private Map<String, String> getUrlParams(HttpServletRequest request){
+        String queryParams = "";
+        try {
+            queryParams = request.getQueryString();
+            if(StringUtils.isNotBlank(queryParams)) {
+                queryParams = URLDecoder.decode(request.getQueryString(), "utf-8");
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        Map<String, String> result = new HashMap<>();
+        if(StringUtils.isNotBlank(queryParams)) {
+            String[] spilt = queryParams.split("&");
+            for (String s : spilt) {
+                int index = s.indexOf("=");
+                result.put(s.substring(0, index), s.substring(index + 1));
+            }
+        }
+        return result;
+    }
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/fliter/RepeatedlyRequestWrapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/fliter/RepeatedlyRequestWrapper.java
new file mode 100644
index 0000000..4ea54ff
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/fliter/RepeatedlyRequestWrapper.java
@@ -0,0 +1,111 @@
+package com.ruoyi.system.fliter;
+
+import lombok.extern.log4j.Log4j2;
+import org.apache.commons.lang3.exception.ExceptionUtils;
+
+import javax.servlet.ReadListener;
+import javax.servlet.ServletInputStream;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.io.*;
+import java.nio.charset.Charset;
+
+/**
+ * 构建可重复读取inputStream的request
+ *
+ * @author linzhang
+ */
+@Log4j2
+public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper
+{
+    private final byte[] body;
+
+    public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException
+    {
+        super(request);
+        request.setCharacterEncoding("UTF-8");
+        response.setCharacterEncoding("UTF-8");
+
+        body = getBodyString(request).getBytes("UTF-8");
+    }
+
+    public static String getBodyString(ServletRequest request)
+    {
+        StringBuilder sb = new StringBuilder();
+        BufferedReader reader = null;
+        try (InputStream inputStream = request.getInputStream())
+        {
+            reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));
+            String line = "";
+            while ((line = reader.readLine()) != null)
+            {
+                sb.append(line);
+            }
+        }
+        catch (IOException e)
+        {
+            log.warn("getBodyString出现问题!");
+        }
+        finally
+        {
+            if (reader != null)
+            {
+                try
+                {
+                    reader.close();
+                }
+                catch (IOException e)
+                {
+                    log.error(ExceptionUtils.getMessage(e));
+                }
+            }
+        }
+        return sb.toString();
+    }
+
+    @Override
+    public BufferedReader getReader() throws IOException
+    {
+        return new BufferedReader(new InputStreamReader(getInputStream()));
+    }
+
+    @Override
+    public ServletInputStream getInputStream() throws IOException
+    {
+        final ByteArrayInputStream bais = new ByteArrayInputStream(body);
+        return new ServletInputStream()
+        {
+            @Override
+            public int read() throws IOException
+            {
+                return bais.read();
+            }
+
+            @Override
+            public int available() throws IOException
+            {
+                return body.length;
+            }
+
+            @Override
+            public boolean isFinished()
+            {
+                return false;
+            }
+
+            @Override
+            public boolean isReady()
+            {
+                return false;
+            }
+
+            @Override
+            public void setReadListener(ReadListener readListener)
+            {
+
+            }
+        };
+    }
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/fliter/ResponseWrapper.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/fliter/ResponseWrapper.java
new file mode 100644
index 0000000..0777548
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/fliter/ResponseWrapper.java
@@ -0,0 +1,63 @@
+package com.ruoyi.system.fliter;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.WriteListener;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+public class ResponseWrapper extends HttpServletResponseWrapper {
+
+    private ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+    private PrintWriter printWriter = new PrintWriter(outputStream);
+
+    public ResponseWrapper(HttpServletResponse response) {
+        super(response);
+    }
+
+    @Override
+    public PrintWriter getWriter() throws IOException {
+        return printWriter;
+    }
+
+    @Override
+    public ServletOutputStream getOutputStream() throws IOException {
+        return new ServletOutputStream() {
+            @Override
+            public boolean isReady() {
+                return false;
+            }
+
+            @Override
+            public void setWriteListener(WriteListener listener) {
+
+            }
+
+            @Override
+            public void write(int b) throws IOException {
+                outputStream.write(b);
+            }
+        };
+    }
+    public void flush(){
+        try {
+            printWriter.flush();
+            printWriter.close();
+            outputStream.flush();
+            outputStream.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public ByteArrayOutputStream getByteArrayOutputStream(){
+        return outputStream;
+    }
+
+    public String getTextContent() {
+        flush();
+        return outputStream.toString();
+    }
+}

--
Gitblit v1.7.1