| | |
| | | |
| | | 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; |
| | |
| | | @PostMapping("/member/listVoUserCouponByUserId") |
| | | public R<List<AppUserCouponVo>> listVoUserCouponByUserId(@RequestBody Long userId); |
| | | |
| | | /** |
| | | * 更新绑定 |
| | | * @param appMemberBindingDto |
| | | * @return |
| | | */ |
| | | @PostMapping("/member/updateMemberBinding") |
| | | public R updateMemberBinding(@RequestBody AppMemberBindingDto appMemberBindingDto); |
| | | } |
New file |
| | |
| | | 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; |
| | | } |
| | |
| | | */ |
| | | private String avatar; |
| | | |
| | | /** |
| | | * 绑定标记0否1是 |
| | | */ |
| | | @TableField("binding_flag") |
| | | private Integer bindingFlag; |
| | | |
| | | |
| | | @Override |
| | | protected Serializable pkVal() { |
| | | return this.userId; |
| | |
| | | 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; |
| | |
| | | public R<List<AppUserCouponVo>> listVoUserCouponByUserId(Long userId) { |
| | | return R.fail("获取用户优惠券失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R updateMemberBinding(AppMemberBindingDto appMemberBindingDto) { |
| | | return R.fail("更新绑定失败:" + throwable.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | | } |
| | |
| | | <artifactId>ruoyi-common-security</artifactId> |
| | | </dependency> |
| | | |
| | | |
| | | |
| | | <!-- Swagger UI --> |
| | | <dependency> |
| | | <groupId>io.springfox</groupId> |
New file |
| | |
| | | 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; |
| | | } |
| | | } |
New file |
| | |
| | | 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) |
| | | { |
| | | |
| | | } |
| | | }; |
| | | } |
| | | } |
New file |
| | |
| | | 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(); |
| | | } |
| | | } |
| | |
| | | <artifactId>swagger-annotations</artifactId> |
| | | </dependency> |
| | | |
| | | |
| | | </dependencies> |
| | | |
| | | </project> |
| | |
| | | <version>${swagger.fox.version}</version> |
| | | </dependency> |
| | | |
| | | |
| | | </dependencies> |
| | | |
| | | <build> |
| | |
| | | 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, "令牌不能为空"); |
| | |
| | | MerMemberInfoVo merMemberInfo = memberService.getMerMemberInfo(userId); |
| | | return R.ok(merMemberInfo); |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | 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; |
| | |
| | | * @date: 2023/4/30 12:49 |
| | | */ |
| | | |
| | | @GetMapping("/getMember") |
| | | @PostMapping("/getMember") |
| | | public R<Member> getMember(@RequestBody Long userId) |
| | | { |
| | | Member member = memberService.getByUserId(userId); |
| | |
| | | List<AppUserCouponVo> appUserCouponVoList = userCouponService.listVoUserCouponByUserId(userId); |
| | | return R.ok(appUserCouponVoList); |
| | | } |
| | | |
| | | @PostMapping("/updateMemberBinding") |
| | | public R updateMemberBinding(@RequestBody AppMemberBindingDto appMemberBindingDto) |
| | | { |
| | | memberService.updateMemberBinding(appMemberBindingDto); |
| | | return R.ok(); |
| | | } |
| | | } |
New file |
| | |
| | | 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; |
| | | } |
| | | } |
New file |
| | |
| | | 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) |
| | | { |
| | | |
| | | } |
| | | }; |
| | | } |
| | | } |
New file |
| | |
| | | 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(); |
| | | } |
| | | } |
| | |
| | | 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; |
| | |
| | | member.setMemberId(memberId); |
| | | member.setWxUnionid(unionid); |
| | | member.setMiniOpenid(openid); |
| | | member.setBindingFlag(0); |
| | | member.setCreateTime(new Date()); |
| | | this.save(member); |
| | | |
| | |
| | | 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); |
| | | } |
| | | } |
| | |
| | | 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; |
| | |
| | | * @return |
| | | */ |
| | | List<MerCashMemberPageVo> pageMerCashMember(Page page, MerCashMemberPageDto merCashMemberPageDto); |
| | | |
| | | /** |
| | | * |
| | | * @param appMemberBindingDto |
| | | */ |
| | | void updateMemberBinding(AppMemberBindingDto appMemberBindingDto); |
| | | } |
| | |
| | | <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"> |
| | |
| | | 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)); |
| | | } |
| | | } |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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 |
| | |
| | | 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) { |
| | |
| | | @ApiOperation(value = "删除购物车") |
| | | public R changeShoppingCart(@RequestBody AppBaseBathDto appBaseBathDto) { |
| | | Long userId = SecurityUtils.getUserId(); |
| | | if(userId!=null){ |
| | | Member member = memberService.getMember(userId).getData(); |
| | | appBaseBathDto.setUserId(userId); |
| | | } |
| | | shoppingCartService.deleteShoppingCart(appBaseBathDto); |
| | | return R.ok(); |
| | | } |
| | |
| | | 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; |
| | |
| | | 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); |
| | |
| | | appUserOrderPageDto.setShopId(member.getRelationShopId()); |
| | | } |
| | | } |
| | | logger.info("appUserOrderPageDto:"+appUserOrderPageDto.toString()); |
| | | Page<AppUserOrderPageVo> page = new Page<>(); |
| | | page.setSize(appUserOrderPageDto.getPageSize()); |
| | | page.setCurrent(appUserOrderPageDto.getPageNum()); |
| | |
| | | @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; |
| | |
| | | @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; |
New file |
| | |
| | | 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; |
| | | |
| | | } |
| | |
| | | public class MerShopGoodsEditDto extends MerBaseDto { |
| | | |
| | | @ApiModelProperty(value = "商品id") |
| | | private Long goodsId; |
| | | private String goodsId; |
| | | |
| | | @ApiModelProperty(value = "售价") |
| | | private BigDecimal salePrice; |
| | |
| | | * 商品id |
| | | */ |
| | | @TableField("goods_id") |
| | | private Long goodsId; |
| | | private String goodsId; |
| | | /** |
| | | * 商户售价 |
| | | */ |
| | |
| | | public class AppGoodsInfoVo { |
| | | |
| | | @ApiModelProperty(value = "商品id") |
| | | private Long goodsId; |
| | | private String goodsId; |
| | | |
| | | @ApiModelProperty(value = "商品名称") |
| | | private String goodsName; |
New file |
| | |
| | | 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; |
| | | |
| | | } |
| | |
| | | public class AppSimpleActivityGoodsVo { |
| | | |
| | | @ApiModelProperty(value = "商品id") |
| | | private Long goodsId; |
| | | private String goodsId; |
| | | |
| | | @ApiModelProperty(value = "商品名称") |
| | | private String goodsName; |
| | |
| | | public class AppSimpleGoodsVo { |
| | | |
| | | @ApiModelProperty(value = "商品id") |
| | | private Long goodsId; |
| | | private String goodsId; |
| | | |
| | | @ApiModelProperty(value = "商品名称") |
| | | private String goodsName; |
| | |
| | | private String goodsTag; |
| | | |
| | | @ApiModelProperty(value = "商品调理问题") |
| | | private BigDecimal goodsNurses; |
| | | private String goodsNurses; |
| | | |
| | | @ApiModelProperty(value = "商品售价") |
| | | private BigDecimal salesPrice; |
| | |
| | | public class MerGoodsPageVo { |
| | | |
| | | @ApiModelProperty(value = "商品id") |
| | | private Long goodsId; |
| | | private String goodsId; |
| | | |
| | | @ApiModelProperty(value = "商品名称") |
| | | private String goodsName; |
New file |
| | |
| | | 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; |
| | | } |
New file |
| | |
| | | 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; |
| | | } |
New file |
| | |
| | | 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; |
| | | } |
| | | } |
New file |
| | |
| | | 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) |
| | | { |
| | | |
| | | } |
| | | }; |
| | | } |
| | | } |
New file |
| | |
| | | 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(); |
| | | } |
| | | } |
| | |
| | | |
| | | 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; |
| | | |
| | |
| | | * @return |
| | | */ |
| | | List<MerMemberNoClearOrderVo> pageMerMemberNoClearOrder(Page page, @Param("userId") Long userId); |
| | | |
| | | |
| | | |
| | | /** |
| | | * |
| | | * @param merOrderPageDto |
| | | * @return |
| | | */ |
| | | List<MerOrderPageVo> pageMerOrder(Page page,@Param("param") MerOrderPageDto merOrderPageDto); |
| | | |
| | | } |
| | |
| | | |
| | | 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> |
| | |
| | | * @param ids |
| | | */ |
| | | void deleteShoppingCartByIds(String ids); |
| | | |
| | | /** |
| | | * |
| | | * @param userId |
| | | * @param shopId |
| | | * @return |
| | | */ |
| | | List<AppShoppingCartVo> listShoppingCartVo(@Param("userId") Long userId, @Param("shopId")Long shopId); |
| | | } |
| | |
| | | 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; |
| | |
| | | this.save(order); |
| | | appPlaceOrderVo.setOrderId(orderId); |
| | | appPlaceOrderVo.setOrderNo(orderNo); |
| | | |
| | | //调用支付 |
| | | |
| | | return appPlaceOrderVo; |
| | |
| | | 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); |
| | |
| | | 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; |
| | | } |
| | | } |
| | |
| | | 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; |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | */ |
| | | @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); |
| | |
| | | */ |
| | | @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); |
| | |
| | | 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); |
| | | } |
| | | } |
| | |
| | | */ |
| | | void createNewOrder(MerNewOrderDto merNewOrderDto); |
| | | |
| | | /** |
| | | * |
| | | * @param merOrderPageDto |
| | | * @return |
| | | */ |
| | | List<MerOrderPageVo> pageMerOrder(Page page,MerOrderPageDto merOrderPageDto); |
| | | |
| | | } |
| | |
| | | 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> |
| | |
| | | * @param appBaseBathDto |
| | | */ |
| | | void deleteShoppingCart(AppBaseBathDto appBaseBathDto); |
| | | |
| | | /** |
| | | * |
| | | * @param userId |
| | | * @param shopId |
| | | * @return |
| | | */ |
| | | List<AppShoppingCartVo> listShoppingCartVo(Long userId, Long shopId); |
| | | } |
| | |
| | | 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} |
| | |
| | | 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},'%') |
| | |
| | | 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},'%') |
| | |
| | | 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} |
| | |
| | | </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> |
| | |
| | | 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> |
| | |
| | | </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> |
New file |
| | |
| | | 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(); |
| | | } |
| | | } |
| | |
| | | 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; |
| | |
| | | @Api(value = "小程序首页相关接口", tags = "小程序首页相关接口", description = "小程序首页相关接口") |
| | | @RestController |
| | | @RequestMapping("/app/home") |
| | | @Log4j2 |
| | | public class AppHomeController { |
| | | |
| | | |
| | |
| | | @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); |
New file |
| | |
| | | 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; |
| | | |
| | | |
| | | } |
New file |
| | |
| | | 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; |
| | | |
| | | |
| | | } |
New file |
| | |
| | | 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; |
| | | } |
| | |
| | | @TableField("user_id") |
| | | private Long userId; |
| | | /** |
| | | * 跟踪类型 |
| | | * 跟踪类型1电话2手动 |
| | | */ |
| | | @TableField("follow_type") |
| | | private Integer followType; |
| | |
| | | @TableField("follow_content") |
| | | private String followContent; |
| | | |
| | | /** |
| | | * 拨打电话 |
| | | */ |
| | | @TableField("call_phone") |
| | | private String callPhone; |
| | | |
| | | @Override |
| | | protected Serializable pkVal() { |
New file |
| | |
| | | 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; |
| | | |
| | | } |
New file |
| | |
| | | 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; |
| | | } |
New file |
| | |
| | | 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; |
| | | } |
| | | } |
New file |
| | |
| | | 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) |
| | | { |
| | | |
| | | } |
| | | }; |
| | | } |
| | | } |
New file |
| | |
| | | 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(); |
| | | } |
| | | } |
| | |
| | | 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> |
| | |
| | | */ |
| | | public interface MemberTaskMapper extends BaseMapper<MemberTask> { |
| | | |
| | | /** |
| | | * |
| | | * @param page |
| | | * @param merMemberTaskPageDto |
| | | * @return |
| | | */ |
| | | List<MerMemberTaskPageVo> pageMerMemberTask(Page page, @Param("param") MerMemberTaskPageDto merMemberTaskPageDto); |
| | | } |
| | |
| | | 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> |
| | |
| | | */ |
| | | public interface MemberTaskRecordMapper extends BaseMapper<MemberTaskRecord> { |
| | | |
| | | /** |
| | | * |
| | | * @param page |
| | | * @param merMemberTaskPageDto |
| | | * @return |
| | | */ |
| | | List<MerMemberTaskRecordPageVo> pageMerMemberTaskRecord(Page page, @Param("param") MerMemberTaskPageDto merMemberTaskPageDto); |
| | | } |
| | |
| | | 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; |
| | |
| | | |
| | | @Resource |
| | | private RemoteConfigService configService; |
| | | |
| | | @Resource |
| | | private RemoteMemberService remoteMemberService; |
| | | |
| | | @Resource |
| | | private RemoteUserService sysUserService; |
| | |
| | | //获取附近商户 |
| | | 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()); |
| | |
| | | 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> |
| | |
| | | @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; |
| | | } |
| | | } |
| | | } |
| | |
| | | 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> |
| | |
| | | @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); |
| | | |
| | | } |
| | | } |
| | |
| | | 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> |
| | |
| | | @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); |
| | | } |
| | | } |
| | |
| | | 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> |
| | |
| | | */ |
| | | public interface MemberTaskRecordService extends IService<MemberTaskRecord> { |
| | | |
| | | /** |
| | | * |
| | | * @param page |
| | | * @param merMemberTaskPageDto |
| | | * @return |
| | | */ |
| | | List<MerMemberTaskRecordPageVo> pageMerMemberTaskRecord(Page page, MerMemberTaskPageDto merMemberTaskPageDto); |
| | | } |
| | |
| | | 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> |
| | |
| | | */ |
| | | 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); |
| | | |
| | | } |
| | |
| | | import com.ruoyi.shop.domain.pojo.task.TaskFile; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | | * 跟进附件 服务类 |
| | |
| | | */ |
| | | public interface TaskFileService extends IService<TaskFile> { |
| | | |
| | | /** |
| | | * |
| | | * @param followId |
| | | * @param followType |
| | | * @return |
| | | */ |
| | | List<TaskFile> listByFollowIdAndFollowType(Long followId, Integer followType); |
| | | |
| | | } |
| | |
| | | </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> |
| | |
| | | </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> |
| | |
| | | public class AppImmediatelyBuyDto extends AppBaseDto { |
| | | |
| | | @ApiModelProperty(value = "商品id") |
| | | private Long goodsId; |
| | | private String goodsId; |
| | | |
| | | @ApiModelProperty(value = "购买数量") |
| | | private Integer buyNum; |
New file |
| | |
| | | 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; |
| | | } |
| | | } |
New file |
| | |
| | | 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) |
| | | { |
| | | |
| | | } |
| | | }; |
| | | } |
| | | } |
New file |
| | |
| | | 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(); |
| | | } |
| | | } |