From 423ae62e51b0817cb2f0fb9520d3bb807b8fd81a Mon Sep 17 00:00:00 2001 From: yovinchen Date: Thu, 9 May 2024 14:08:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E7=AB=AFbug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test/java/com/yovinchen/xlcs/CodeGet.java | 6 +- .../src/main/resources/bootstrap.yml | 2 +- .../service/impl/ActivityInfoServiceImpl.java | 58 +++++---------- .../service/impl/CartInfoServiceImpl.java | 22 +++--- .../service/impl/OrderInfoServiceImpl.java | 72 ++++++++++++++----- .../service/impl/WeXinServiceImpl.java | 1 + .../user/controller/LeaderController.java | 10 +-- .../xlcs/user/service/LeaderService.java | 5 +- .../user/service/impl/LeaderServiceImpl.java | 25 +++++-- 9 files changed, 118 insertions(+), 83 deletions(-) diff --git a/xlcs-parent/common/service-util/src/test/java/com/yovinchen/xlcs/CodeGet.java b/xlcs-parent/common/service-util/src/test/java/com/yovinchen/xlcs/CodeGet.java index e9c9cba..5e4b860 100644 --- a/xlcs-parent/common/service-util/src/test/java/com/yovinchen/xlcs/CodeGet.java +++ b/xlcs-parent/common/service-util/src/test/java/com/yovinchen/xlcs/CodeGet.java @@ -34,10 +34,10 @@ public class CodeGet { // 3、数据源配置 DataSourceConfig dsc = new DataSourceConfig(); - dsc.setUrl("jdbc:mysql://82.157.68.223:3306/shequ-user?serverTimezone=GMT%2B8&useSSL=false"); + dsc.setUrl("jdbc:mysql://82.157.68.223:3306/xlcs-user?serverTimezone=GMT%2B8&useSSL=false"); dsc.setDriverName("com.mysql.cj.jdbc.Driver"); - dsc.setUsername("shequ-user"); - dsc.setPassword("shequ-user"); + dsc.setUsername("xlcs-user"); + dsc.setPassword("xlcs-user"); dsc.setDbType(DbType.MYSQL); mpg.setDataSource(dsc); diff --git a/xlcs-parent/service-gateway/src/main/resources/bootstrap.yml b/xlcs-parent/service-gateway/src/main/resources/bootstrap.yml index fac6af2..fcbfeae 100644 --- a/xlcs-parent/service-gateway/src/main/resources/bootstrap.yml +++ b/xlcs-parent/service-gateway/src/main/resources/bootstrap.yml @@ -8,4 +8,4 @@ spring: username: nacos password: nacos enabled: true - file-extension: yml + file-extension: yml \ No newline at end of file diff --git a/xlcs-parent/service/service-activity/src/main/java/com/yovinchen/xlcs/activity/service/impl/ActivityInfoServiceImpl.java b/xlcs-parent/service/service-activity/src/main/java/com/yovinchen/xlcs/activity/service/impl/ActivityInfoServiceImpl.java index d38864a..5a2cf34 100644 --- a/xlcs-parent/service/service-activity/src/main/java/com/yovinchen/xlcs/activity/service/impl/ActivityInfoServiceImpl.java +++ b/xlcs-parent/service/service-activity/src/main/java/com/yovinchen/xlcs/activity/service/impl/ActivityInfoServiceImpl.java @@ -1,5 +1,10 @@ package com.yovinchen.xlcs.activity.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yovinchen.xlcs.activity.mapper.ActivityInfoMapper; import com.yovinchen.xlcs.activity.mapper.ActivityRuleMapper; import com.yovinchen.xlcs.activity.mapper.ActivitySkuMapper; @@ -16,11 +21,6 @@ import com.yovinchen.xlcs.model.product.SkuInfo; import com.yovinchen.xlcs.vo.activity.ActivityRuleVo; import com.yovinchen.xlcs.vo.order.CartInfoVo; import com.yovinchen.xlcs.vo.order.OrderConfirmVo; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -70,10 +70,10 @@ public class ActivityInfoServiceImpl extends ServiceImpl page = activityInfoMapper.selectPage(pageParam, queryWrapper); page.getRecords() - .forEach(item -> { - item.setActivityTypeString(item.getActivityType() - .getComment()); - }); + .forEach(item -> { + item.setActivityTypeString(item.getActivityType() + .getComment()); + }); return page; } @@ -96,8 +96,8 @@ public class ActivityInfoServiceImpl extends ServiceImpl activitySkuList = activitySkuMapper.selectList(activitySkuQueryWrapper); List skuIdList = activitySkuList.stream() - .map(ActivitySku::getSkuId) - .collect(Collectors.toList()); + .map(ActivitySku::getSkuId) + .collect(Collectors.toList()); List skuInfoList = null; if (!skuIdList.isEmpty()) { @@ -159,8 +159,8 @@ public class ActivityInfoServiceImpl extends ServiceImpl skuIdList = skuInfoList.stream() - .map(SkuInfo::getId) - .collect(Collectors.toList()); + .map(SkuInfo::getId) + .collect(Collectors.toList()); //第二步 判断添加商品之前是否参加过活动, // 如果之前参加过,活动正在进行中,排除商品 @@ -436,22 +436,10 @@ public class ActivityInfoServiceImpl extends ServiceImpl hashOperations = redisTemplate.boundHashOps(cartKey); List cartInfoList = hashOperations.values(); for (CartInfo cartInfo : cartInfoList) { - hashOperations.delete(cartInfo.getSkuId().toString()); + hashOperations.delete(cartInfo.getSkuId() + .toString()); } } @@ -192,7 +193,8 @@ public class CartInfoServiceImpl implements CartInfoService { cartInfoList = boundHashOperations.values(); if (!CollectionUtils.isEmpty(cartInfoList)) { //根据商品添加时间,降序 - cartInfoList.sort((o1, o2) -> o1.getCreateTime().compareTo(o2.getCreateTime())); + cartInfoList.sort((o1, o2) -> o1.getCreateTime() + .compareTo(o2.getCreateTime())); } return cartInfoList; } @@ -234,7 +236,8 @@ public class CartInfoServiceImpl implements CartInfoService { List cartInfoList = boundHashOperations.values(); cartInfoList.forEach(cartInfo -> { cartInfo.setIsChecked(isChecked); - boundHashOperations.put(cartInfo.getSkuId().toString(), cartInfo); + boundHashOperations.put(cartInfo.getSkuId() + .toString(), cartInfo); }); this.setCartKeyExpire(cartKey); } @@ -253,7 +256,8 @@ public class CartInfoServiceImpl implements CartInfoService { skuIdList.forEach(skuId -> { CartInfo cartInfo = boundHashOperations.get(skuId.toString()); cartInfo.setIsChecked(isChecked); - boundHashOperations.put(cartInfo.getSkuId().toString(), cartInfo); + boundHashOperations.put(cartInfo.getSkuId() + .toString(), cartInfo); }); this.setCartKeyExpire(cartKey); } @@ -270,9 +274,9 @@ public class CartInfoServiceImpl implements CartInfoService { BoundHashOperations boundHashOperations = redisTemplate.boundHashOps(cartKey); List cartInfoList = boundHashOperations.values(); //isChecked = 1购物项选中 - return cartInfoList.stream().filter(cartInfo -> { - return cartInfo.getIsChecked().intValue() == 1; - }).collect(Collectors.toList()); + return cartInfoList != null ? cartInfoList.stream() + .filter(cartInfo -> cartInfo.getIsChecked() == 1) + .collect(Collectors.toList()) : null; } /** @@ -286,7 +290,9 @@ public class CartInfoServiceImpl implements CartInfoService { List cartInfoList = this.getCartCheckedList(userId); //查询list数据处理,得到skuId集合 - List skuIdList = cartInfoList.stream().map(item -> item.getSkuId()).collect(Collectors.toList()); + List skuIdList = cartInfoList.stream() + .map(item -> item.getSkuId()) + .collect(Collectors.toList()); //构建redis的key值 // hash类型 key filed-value diff --git a/xlcs-parent/service/service-order/src/main/java/com/yovinchen/xlcs/order/service/impl/OrderInfoServiceImpl.java b/xlcs-parent/service/service-order/src/main/java/com/yovinchen/xlcs/order/service/impl/OrderInfoServiceImpl.java index c08adfd..3b279c9 100644 --- a/xlcs-parent/service/service-order/src/main/java/com/yovinchen/xlcs/order/service/impl/OrderInfoServiceImpl.java +++ b/xlcs-parent/service/service-order/src/main/java/com/yovinchen/xlcs/order/service/impl/OrderInfoServiceImpl.java @@ -28,6 +28,7 @@ import com.yovinchen.xlcs.order.service.OrderItemService; import com.yovinchen.xlcs.vo.order.*; import com.yovinchen.xlcs.vo.product.SkuStockLockVo; import com.yovinchen.xlcs.vo.user.LeaderAddressVo; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.BoundHashOperations; import org.springframework.data.redis.core.RedisTemplate; @@ -39,7 +40,7 @@ import org.springframework.util.StringUtils; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; -import java.util.concurrent.TimeUnit; +import java.util.concurrent.*; import java.util.stream.Collectors; /** @@ -51,6 +52,7 @@ import java.util.stream.Collectors; * @since 2023-10-12 */ @Service +@Slf4j public class OrderInfoServiceImpl extends ServiceImpl implements OrderInfoService { @Autowired private UserFeignClient userFeignClient; @@ -83,29 +85,66 @@ public class OrderInfoServiceImpl extends ServiceImpl cartInfoList = cartFeignClient.getCartCheckedList(userId); + // 使用CompletableFuture进行多线程异步处理,并设置超时时间为1秒 + CompletableFuture leaderAddressFuture = CompletableFuture.supplyAsync(() -> { + // 获取用户id + Long userId = AuthContextHolder.getUserId(); + // 获取用户对应配送员信息 + return userFeignClient.getUserAddressByUserId(userId); + }, executorService); - //唯一标识订单 + CompletableFuture> cartInfoFuture = CompletableFuture.supplyAsync(() -> { + // 获取用户id + Long userId = AuthContextHolder.getUserId(); + // 获取购物车里面选中的商品 + return cartFeignClient.getCartCheckedList(userId); + }, executorService); + + // 使用ScheduledExecutorService设置超时 + scheduler.schedule(() -> { + leaderAddressFuture.complete(null); + log.info("获取地址信息任务超时"); + }, 1, TimeUnit.SECONDS); + + scheduler.schedule(() -> { + cartInfoFuture.complete(null); + log.info("获取购物车选中商品任务超时"); + }, 1, TimeUnit.SECONDS); + + // 等待上述所有异步任务完成 + CompletableFuture allFutures = CompletableFuture.allOf(leaderAddressFuture, cartInfoFuture); + + try { + allFutures.get(); // 等待所有任务完成 + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } finally { + executorService.shutdown(); // 关闭线程池 + scheduler.shutdown(); // 关闭调度器 + } + + // 唯一标识订单 String orderNo = System.currentTimeMillis() + ""; redisTemplate.opsForValue() .set(RedisConst.ORDER_REPEAT + orderNo, orderNo, 24, TimeUnit.HOURS); - //获取购物车满足条件活动和优惠卷信息 - OrderConfirmVo orderConfirmVo = activityFeignClient.findCartActivityAndCoupon(cartInfoList, userId); - //封装其他值 - orderConfirmVo.setLeaderAddressVo(leaderAddressVo); + // 获取购物车满足条件活动和优惠卷信息 + OrderConfirmVo orderConfirmVo = activityFeignClient.findCartActivityAndCoupon(cartInfoFuture.join(), AuthContextHolder.getUserId()); + + // 封装其他值 + orderConfirmVo.setLeaderAddressVo(leaderAddressFuture.join()); orderConfirmVo.setOrderNo(orderNo); return orderConfirmVo; } + /** * 生成订单 * @@ -371,16 +410,14 @@ public class OrderInfoServiceImpl extends ServiceImpl getOrderInfoByUserIdPage(Page pageParam, OrderUserQueryVo orderUserQueryVo) { - IPage pageModel = baseMapper.selectPage(pageParam, new LambdaQueryWrapper() - .eq(OrderInfo::getUserId, orderUserQueryVo.getUserId()) + IPage pageModel = baseMapper.selectPage(pageParam, new LambdaQueryWrapper().eq(OrderInfo::getUserId, orderUserQueryVo.getUserId()) .eq(OrderInfo::getOrderStatus, orderUserQueryVo.getOrderStatus())); //获取每个订单,把每个订单里面订单项查询封装 List orderInfoList = pageModel.getRecords(); for (OrderInfo orderInfo : orderInfoList) { //根据订单id查询里面所有订单项列表 - List orderItemList = orderItemMapper.selectList(new LambdaQueryWrapper() - .eq(OrderItem::getOrderId, orderInfo.getId())); + List orderItemList = orderItemMapper.selectList(new LambdaQueryWrapper().eq(OrderItem::getOrderId, orderInfo.getId())); //把订单项集合封装到每个订单里面 orderInfo.setOrderItemList(orderItemList); //封装订单状态名称 @@ -427,8 +464,7 @@ public class OrderInfoServiceImpl extends ServiceImpl orderInfoList = pageModel.getRecords(); for (OrderInfo orderInfo : orderInfoList) { //根据订单id查询里面所有订单项列表 - List orderItemList = orderItemMapper.selectList(new LambdaQueryWrapper() - .eq(OrderItem::getOrderId, orderInfo.getId())); + List orderItemList = orderItemMapper.selectList(new LambdaQueryWrapper().eq(OrderItem::getOrderId, orderInfo.getId())); //把订单项集合封装到每个订单里面 orderInfo.setOrderItemList(orderItemList); //封装订单状态名称 diff --git a/xlcs-parent/service/service-payment/src/main/java/com/yovinchen/xlcs/payment/service/impl/WeXinServiceImpl.java b/xlcs-parent/service/service-payment/src/main/java/com/yovinchen/xlcs/payment/service/impl/WeXinServiceImpl.java index 136027a..d6f94d1 100644 --- a/xlcs-parent/service/service-payment/src/main/java/com/yovinchen/xlcs/payment/service/impl/WeXinServiceImpl.java +++ b/xlcs-parent/service/service-payment/src/main/java/com/yovinchen/xlcs/payment/service/impl/WeXinServiceImpl.java @@ -101,6 +101,7 @@ public class WeXinServiceImpl implements WeixinService { result.put("signType", "MD5"); result.put("paySign", sign); result.put("package", packages); + result.put("out_trade_no", paymentInfo.getOrderNo()); //6 返回结果 return result; diff --git a/xlcs-parent/service/service-user/src/main/java/com/yovinchen/xlcs/user/controller/LeaderController.java b/xlcs-parent/service/service-user/src/main/java/com/yovinchen/xlcs/user/controller/LeaderController.java index eb98b9a..0ef03fe 100644 --- a/xlcs-parent/service/service-user/src/main/java/com/yovinchen/xlcs/user/controller/LeaderController.java +++ b/xlcs-parent/service/service-user/src/main/java/com/yovinchen/xlcs/user/controller/LeaderController.java @@ -4,9 +4,9 @@ package com.yovinchen.xlcs.user.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yovinchen.xlcs.common.result.Result; +import com.yovinchen.xlcs.model.user.Leader; import com.yovinchen.xlcs.user.service.LeaderService; import com.yovinchen.xlcs.vo.user.LeaderQueryVo; -import com.yovinchen.xlcs.vo.user.LeaderVo; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.beans.factory.annotation.Autowired; @@ -17,7 +17,7 @@ import org.springframework.web.bind.annotation.RestController; /** *

- * 团长表 前端控制器 + * 配送员 前端控制器 *

* * @author yovinchen @@ -34,12 +34,12 @@ public class LeaderController { // getPageCheckList @ApiOperation(value = "获取页面列表") @GetMapping("getPageCheckList/{page}/{limit}") - public Result> getPageCheckList(@ApiParam(name = "page", value = "当前页码", required = true) @PathVariable Long page, + public Result getPageCheckList(@ApiParam(name = "page", value = "当前页码", required = true) @PathVariable Long page, @ApiParam(name = "limit", value = "每页记录数", required = true) @PathVariable Long limit, @ApiParam(name = "LeaderQueryVo", value = "查询对象", required = false) LeaderQueryVo leaderQueryVo) { try { - Page pageParam = new Page<>(page, limit); - IPage pageModel = leaderService.selectPage(pageParam, leaderQueryVo); + Page pageParam = new Page<>(page, limit); + IPage pageModel = leaderService.selectPage(pageParam, leaderQueryVo); return Result.ok(pageModel); } catch (Exception e) { throw new RuntimeException("获取sku分页列表异常", e); diff --git a/xlcs-parent/service/service-user/src/main/java/com/yovinchen/xlcs/user/service/LeaderService.java b/xlcs-parent/service/service-user/src/main/java/com/yovinchen/xlcs/user/service/LeaderService.java index c46ab12..901362a 100644 --- a/xlcs-parent/service/service-user/src/main/java/com/yovinchen/xlcs/user/service/LeaderService.java +++ b/xlcs-parent/service/service-user/src/main/java/com/yovinchen/xlcs/user/service/LeaderService.java @@ -5,11 +5,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.yovinchen.xlcs.model.user.Leader; import com.yovinchen.xlcs.vo.user.LeaderQueryVo; -import com.yovinchen.xlcs.vo.user.LeaderVo; /** *

- * 团长表 服务类 + * 配送员 服务类 *

* * @author yovinchen @@ -17,5 +16,5 @@ import com.yovinchen.xlcs.vo.user.LeaderVo; */ public interface LeaderService extends IService { - IPage selectPage(Page pageParam, LeaderQueryVo leaderQueryVo); + IPage selectPage(Page pageParam, LeaderQueryVo leaderQueryVo); } diff --git a/xlcs-parent/service/service-user/src/main/java/com/yovinchen/xlcs/user/service/impl/LeaderServiceImpl.java b/xlcs-parent/service/service-user/src/main/java/com/yovinchen/xlcs/user/service/impl/LeaderServiceImpl.java index 3b14157..421f95e 100644 --- a/xlcs-parent/service/service-user/src/main/java/com/yovinchen/xlcs/user/service/impl/LeaderServiceImpl.java +++ b/xlcs-parent/service/service-user/src/main/java/com/yovinchen/xlcs/user/service/impl/LeaderServiceImpl.java @@ -1,5 +1,6 @@ package com.yovinchen.xlcs.user.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -7,22 +8,38 @@ import com.yovinchen.xlcs.model.user.Leader; import com.yovinchen.xlcs.user.mapper.LeaderMapper; import com.yovinchen.xlcs.user.service.LeaderService; import com.yovinchen.xlcs.vo.user.LeaderQueryVo; -import com.yovinchen.xlcs.vo.user.LeaderVo; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; /** *

- * 团长表 服务实现类 + * 配送员 服务实现类 *

* * @author yovinchen * @since 2024-01-30 */ +@Slf4j @Service public class LeaderServiceImpl extends ServiceImpl implements LeaderService { + /** + * 分页查询配送员 + * + * @param pageParam + * @param leaderQueryVo + * @return + */ @Override - public IPage selectPage(Page pageParam, LeaderQueryVo leaderQueryVo) { - return null; + public IPage selectPage(Page pageParam, LeaderQueryVo leaderQueryVo) { + log.info("获取配送员分页列表入参{}", pageParam.toString() + leaderQueryVo.toString()); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + String keyword = leaderQueryVo.getKeyword(); + if (!StringUtils.isEmpty(keyword)) { + //封装条件 + wrapper.like(Leader::getName, keyword); + } + return baseMapper.selectPage(pageParam, wrapper); } }