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