From c20f3ff04d14a4bdbc20fa0ae36ee65e9a804832 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Fri, 18 Jun 2021 16:22:49 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=88=86=E7=B1=BB?= =?UTF-8?q?=E4=B8=8B=E6=98=AF=E5=90=A6=E5=AD=98=E5=9C=A8=E5=95=86=E5=93=81?= =?UTF-8?q?=EF=BC=8C=E5=8E=BB=E9=99=A4=E6=8E=89=E5=B7=B2=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=95=86=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java index 355d06e0..9a50861a 100644 --- a/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsServiceImpl.java @@ -96,6 +96,7 @@ public class GoodsServiceImpl extends ServiceImpl implements public final Integer getGoodsCountByCategory(String categoryId) { QueryWrapper queryWrapper = Wrappers.query(); queryWrapper.like("category_path", categoryId); + queryWrapper.eq("delete_flag", false); return this.count(queryWrapper); } From 9546807031ad8cedb617d98659d1bd347f242c0b Mon Sep 17 00:00:00 2001 From: Chopper Date: Mon, 21 Jun 2021 10:53:04 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E6=B5=81=E9=87=8F=E9=99=90=E5=88=B6?= =?UTF-8?q?=E8=AE=BE=E5=AE=9A=E6=9B=B4=E5=90=88=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/aop/limiter/LimitInterceptor.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java b/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java index 0e35a46a..59ea7a02 100644 --- a/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java +++ b/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java @@ -1,6 +1,7 @@ package cn.lili.common.aop.limiter; import cn.lili.common.aop.limiter.annotation.LimitPoint; +import cn.lili.common.exception.ServiceException; import com.google.common.collect.ImmutableList; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -21,6 +22,7 @@ import java.lang.reflect.Method; /** * 流量拦截 + * * @author Chopper */ @Aspect @@ -42,7 +44,7 @@ public class LimitInterceptor { } @Around("execution(public * *(..)) && @annotation(cn.lili.common.aop.limiter.annotation.LimitPoint)") - public Object interceptor(ProceedingJoinPoint pjp) { + public Object interceptor(ProceedingJoinPoint pjp) throws Throwable { MethodSignature signature = (MethodSignature) pjp.getSignature(); Method method = signature.getMethod(); LimitPoint limitPointAnnotation = method.getAnnotation(LimitPoint.class); @@ -65,22 +67,27 @@ public class LimitInterceptor { try { Number count = redisTemplate.execute(limitScript, keys, limitCount, limitPeriod); log.info("Access try count is {} for name={} and key = {}", count, name, key); - if (count != null && count.intValue() <= limitCount) { + // 如果缓存里没有值,或者他的值小于限制频率 + if (count.intValue() <= limitCount) { return pjp.proceed(); } else { - throw new RuntimeException("访问过于频繁,请稍后再试"); + throw new ServiceException("访问过于频繁,请稍后再试"); } - } catch (Throwable e) { - if (e instanceof RuntimeException) { - throw new RuntimeException(e.getLocalizedMessage()); + } catch (NullPointerException e) { + return pjp.proceed(); + } catch (Exception e) { + if (e instanceof ServiceException) { + throw new ServiceException(e.getLocalizedMessage()); } throw new RuntimeException("服务器异常,请稍后再试"); } } + //默认unknown常量值 private static final String UNKNOWN = "unknown"; + //获取ip public String getIpAddress() { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String ip = request.getHeader("x-forwarded-for"); From 50911137cb8bbfefff3b11fd1dd217a4ca16743b Mon Sep 17 00:00:00 2001 From: Chopper Date: Mon, 21 Jun 2021 11:55:08 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E8=B4=AD=E7=89=A9=E8=BD=A6=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E7=9B=B8=E5=85=B3=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/aop/limiter/LimitInterceptor.java | 7 +- .../java/cn/lili/common/enums/ResultCode.java | 78 +++++++++- .../order/cart/render/TradeBuilder.java | 47 ++++--- .../cart/render/impl/CheckDataRender.java | 86 ++++++++++- .../cart/render/impl/FullDiscountRender.java | 42 +++--- .../cart/render/impl/SkuFreightRender.java | 13 +- .../order/cart/service/CartService.java | 13 -- .../order/cart/service/CartServiceImpl.java | 133 +++++++++--------- .../order/serviceimpl/OrderServiceImpl.java | 21 +-- 9 files changed, 284 insertions(+), 156 deletions(-) diff --git a/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java b/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java index 59ea7a02..4a0cf9c6 100644 --- a/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java +++ b/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java @@ -73,12 +73,11 @@ public class LimitInterceptor { } else { throw new ServiceException("访问过于频繁,请稍后再试"); } - } catch (NullPointerException e) { + } + //如果从redis中执行都值判定为空,则这里跳过 + catch (NullPointerException e) { return pjp.proceed(); } catch (Exception e) { - if (e instanceof ServiceException) { - throw new ServiceException(e.getLocalizedMessage()); - } throw new RuntimeException("服务器异常,请稍后再试"); } } diff --git a/framework/src/main/java/cn/lili/common/enums/ResultCode.java b/framework/src/main/java/cn/lili/common/enums/ResultCode.java index 90fd8a16..d6e4b16b 100644 --- a/framework/src/main/java/cn/lili/common/enums/ResultCode.java +++ b/framework/src/main/java/cn/lili/common/enums/ResultCode.java @@ -97,8 +97,8 @@ public enum ResultCode { USER_RECEIPT_NOT_EXIST(20014, "会员发票信息不存在"), USER_EDIT_ERROR(20015, "用户修改失败"), USER_OLD_PASSWORD_ERROR(20016, "旧密码不正确"), - USER_COLLECTION_EXIST(20017,"无法重复收藏"), - USER_GRADE_IS_DEFAULT(20018,"会员等级为默认会员等级"), + USER_COLLECTION_EXIST(20017, "无法重复收藏"), + USER_GRADE_IS_DEFAULT(20018, "会员等级为默认会员等级"), DELETE_EXIST(2001, "无法重复收藏"), /** @@ -125,62 +125,97 @@ public enum ResultCode { * 购物车 */ CART_ERROR(30001, "读取结算页的购物车异常"), + CART_PINTUAN_NOT_EXIST_ERROR(30002, "拼团活动不存在错误"), + CART_PINTUAN_LIMIT_ERROR(30003, "购买数量超过拼团活动限制数量"), SHIPPING_NOT_APPLY(30005, "购物商品不支持当前收货地址配送"), + /** * 订单 */ ORDER_ERROR(31001, "创建订单异常,请稍后重试"), + ORDER_NOT_EXIST(31002, "订单不存在"), + ORDER_DELIVERED_ERROR(31003, "订单状态错误,无法进行确认收货"), + ORDER_UPDATE_PRICE_ERROR(31004, "已支付的订单不能修改金额"), + ORDER_LOGISTICS_ERROR(31005, "物流错误"), + ORDER_DELIVER_ERROR(31006, "物流错误"), + ORDER_NOT_USER(31007, "非当前会员的订单"), + ORDER_TAKE_ERROR(31008, "当前订单无法核销"), + MEMBER_ADDRESS_NOT_EXIST(31009, "订单无收货地址,请先配置收货地址"), + ORDER_DELIVER_NUM_ERROR(31010, "没有待发货的订单"), /** * 支付 */ PAY_UN_WANTED(32000, "当前订单不需要付款,返回订单列表等待系统订单出库即可"), + PAY_SUCCESS(32001, "支付成功"), + PAY_INCONSISTENT_ERROR(32002, "付款金额和应付金额不一致"), + PAY_DOUBLE_ERROR(32003, "订单已支付,不能再次进行支付"), + PAY_CASHIER_ERROR(32004, "收银台信息获取错误"), + PAY_ERROR(32005, "支付业务异常,请稍后重试"), + PAY_BAN(32006, "当前订单不需要付款,请返回订单列表重新操作"), + PAY_PARTIAL_ERROR(32007, "该订单已部分支付,请前往订单中心进行支付"), + PAY_NOT_SUPPORT(32008, "支付暂不支持"), + PAY_CLIENT_TYPE_ERROR(32009, "错误的客户端"), + PAY_POINT_ENOUGH(32010, "积分不足,不能兑换"), + PAY_NOT_EXIST_ORDER(32011, "支付订单不存在"), /** * 售后 */ AFTER_SALES_NOT_PAY_ERROR(33001, "当前订单未支付,不能申请售后"), + AFTER_SALES_CANCEL_ERROR(33002, "当前售后单无法取消"), + AFTER_SALES_BAN(33003, "订单状态不允许申请售后,请联系平台或商家"), + AFTER_SALES_DOUBLE_ERROR(33004, "售后已审核,无法重复操作"), + AFTER_SALES_LOGISTICS_ERROR(33005, "物流公司错误,请重新选择"), + AFTER_STATUS_ERROR(33006, "售后状态错误,请刷新页面"), /** * 投诉 */ COMPLAINT_ORDER_ITEM_EMPTY_ERROR(33100, "订单不存在"), + COMPLAINT_SKU_EMPTY_ERROR(33101, "商品已下架,如需投诉请联系平台客服"), + COMPLAINT_ERROR(33102, "投诉异常,请稍后重试"), /** * 余额 */ WALLET_NOT_EXIT_ERROR(34000, "钱包不存在,请联系管理员"), + WALLET_INSUFFICIENT(34001, "余额不足以支付订单,请充值!"), + WALLET_WITHDRAWAL_INSUFFICIENT(34002, "可提现金额不足!"), + WALLET_ERROR_INSUFFICIENT(34003, "零钱提现失败!"), + WALLET_REMARK_ERROR(34004, "请填写审核备注!"), + WALLET_APPLY_ERROR(34005, "提现申请异常!"), /** @@ -197,52 +232,74 @@ public enum ResultCode { * 优惠券 */ COUPON_EDIT_STATUS_SUCCESS(41001, "修改状态成功!"), + COUPON_CANCELLATION_SUCCESS(41002, "会员优惠券作废成功"), + COUPON_EXPIRED(41003, "优惠券已使用/已过期,不能使用"), + COUPON_EDIT_STATUS_ERROR(41004, "优惠券修改状态失败!"), /** * 拼团 */ PINTUAN_MANUAL_OPEN_SUCCESS(42001, "手动开启拼团活动成功"), + PINTUAN_MANUAL_CLOSE_SUCCESS(42002, "手动关闭拼团活动成功"), + PINTUAN_ADD_SUCCESS(42003, "添加拼团活动成功"), + PINTUAN_EDIT_SUCCESS(42004, "修改拼团活动成功"), + PINTUAN_DELETE_SUCCESS(42005, "删除拼团活动成功"), + PINTUAN_MANUAL_OPEN_ERROR(42006, "手动开启拼团活动失败"), + PINTUAN_MANUAL_CLOSE_ERROR(42007, "手动关闭拼团活动失败"), + PINTUAN_ADD_ERROR(42008, "添加拼团活动失败"), + PINTUAN_EDIT_ERROR(42009, "修改拼团活动失败"), + PINTUAN_DELETE_ERROR(42010, "删除拼团活动失败"), /** * 满额活动 */ FULL_DISCOUNT_EDIT_SUCCESS(43001, "修改满优惠活动成功"), + FULL_DISCOUNT_EDIT_DELETE(43002, "删除满优惠活动成功"), /** * 店铺 */ STORE_NOT_EXIST(50001, "此店铺不存在"), + STORE_NAME_EXIST_ERROR(50002, "店铺名称已存在!"), + STORE_APPLY_DOUBLE_ERROR(50003, "已有店铺,无需重复申请!"), /** * 结算单 */ BILL_CHECK_ERROR(51001, "只有已出账结算单可以核对"), + BILL_COMPLETE_ERROR(51002, "只有已审核结算单可以支付"), /** * 文章 */ ARTICLE_CATEGORY_NAME_EXIST(60001, "文章分类名称已存在"), + ARTICLE_CATEGORY_PARENT_NOT_EXIST(60002, "文章分类父分类不存在"), + ARTICLE_CATEGORY_BEYOND_TWO(60003, "最多为二级分类,操作失败"), + ARTICLE_CATEGORY_DELETE_ERROR(60004, "该文章分类下存在子分类,不能删除"), + ARTICLE_CATEGORY_HAS_ARTICLE(60005, "该文章分类下存在文章,不能删除"), + ARTICLE_CATEGORY_NO_DELETION(60007, "默认文章分类不能进行删除"), + ARTICLE_NO_DELETION(60008, "默认文章不能进行删除"), @@ -250,8 +307,11 @@ public enum ResultCode { * 页面 */ PAGE_NOT_EXIST(61001, "页面不存在"), + PAGE_OPEN_DELETE_ERROR(61002, "当前页面为开启状态,无法删除"), + PAGE_DELETE_ERROR(61003, "当前页面为唯一页面,无法删除"), + PAGE_RELEASE_ERROR(61004, "页面已发布,无需重复提交"), /** @@ -268,39 +328,49 @@ public enum ResultCode { * 站内信 */ NOTICE_NOT_EXIST(80101, "当前消息模板不存在"), + NOTICE_ERROR(80102, "修改站内信异常,请稍后重试"), /** * OSS */ OSS_NOT_EXIST(80201, "OSS未配置"), + OSS_EXCEPTION(80202, "文件上传失败,请稍后重试"), /** * 验证码 */ VERIFICATION_SEND_SUCCESS(80301, "短信验证码,发送成功"), + VERIFICATION_ERROR(80302, "验证失败"), + VERIFICATION_SMS_ERROR(80303, "短信验证码错误,请重新校验"), + VERIFICATION_SMS_EXPIRED_ERROR(80304, "验证码已失效,请重新校验"), /** * 配置错误 */ ALIPAY_NOT_SETTING(80401, "支付宝支付未配置"), + ALIPAY_EXCEPTION(80402, "支付宝支付错误,请稍后重试"), + ALIPAY_PARAMS_EXCEPTION(80403, "支付宝参数异常"), /** * 微信相关异常 */ WECHAT_CONNECT_NOT_SETTING(80500, "微信联合登陆信息未配置"), + WECHAT_PAYMENT_NOT_SETTING(80501, "微信支付信息未配置"), + WECHAT_QRCODE_ERROR(80502, "微信二维码生成异常"), + WECHAT_MP_MESSAGE_ERROR(80503, "微信小程序小消息订阅异常"), - APP_VERSION_EXIST(80600, "APP版本已存在") - ; + APP_VERSION_EXIST(80600, "APP版本已存在"); + private final Integer code; private final String message; diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java b/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java index ba32de5a..d51ddd1c 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/TradeBuilder.java @@ -16,7 +16,7 @@ import java.util.List; import java.util.stream.Collectors; /** - * TradeBuilder + * 交易构造&&创建 * * @author Chopper * @date2020-04-01 9:47 下午 @@ -24,36 +24,41 @@ import java.util.stream.Collectors; @Service @Slf4j public class TradeBuilder { - //购物车渲染 + + //购物车渲染步骤 @Autowired private List cartRenderSteps; + //交易 @Autowired private TradeService tradeService; + //购物车业务 + @Autowired + private CartService cartService; + + /** * 渲染整比交易 + * 0-> 校验商品, 1-》 满优惠渲染, 2->渲染优惠, 3->优惠券渲染, 4->计算运费, 5->计算价格, 6->分销渲染, 7->扩展操作 */ int[] defaultRender = {0, 1, 2, 4, 5, 6, 7}; /** * 购物车购物车渲染 + * 0-> 校验商品, 1-》 满优惠渲染, 2->渲染优惠, 5->计算价格 */ int[] cartRender = {0, 1, 2, 5}; - /** - * 0-> 校验商品 1-》 满优惠渲染 2->渲染优惠 3->优惠券渲染 4->计算运费 5->计算价格 6->分销渲染 7->扩展操作 - */ - @Autowired - private CartService cartService; - /** * 构造购物车 + * 购物车与结算信息不一致的地方主要是优惠券计算和运费计算,其他规则都是一致都 * * @param checkedWay 购物车类型 * @return 购物车展示信息 */ public TradeDTO buildCart(CartTypeEnum checkedWay) { + //读取对应购物车的商品信息 TradeDTO tradeDTO = cartService.readDTO(checkedWay); //购物车需要将交易中的优惠券取消掉 @@ -67,7 +72,7 @@ public class TradeBuilder { try { cartRenderSteps.get(index).render(tradeDTO); } catch (Exception e) { - log.error("购物车渲染异常:", e); + log.error("购物车{}渲染异常:", cartRenderSteps.get(index).getClass(), e); } } return tradeDTO; @@ -80,28 +85,26 @@ public class TradeBuilder { * @return 购物车展示信息 */ public TradeDTO buildTrade(CartTypeEnum checkedWay) { + //读取对应购物车的商品信息 TradeDTO tradeDTO = cartService.readDTO(checkedWay); - tradeDTO.setNotSupportFreight(null); + //将购物车到sku未选择信息过滤 List collect = tradeDTO.getSkuList().parallelStream().filter(i -> Boolean.TRUE.equals(i.getChecked())).collect(Collectors.toList()); - //拼团类型订单预处理 - if (checkedWay.equals(CartTypeEnum.PINTUAN)) { - for (CartSkuVO cartSkuVO : collect) { - cartSkuVO.setPintuanId(""); - } - } tradeDTO.setSkuList(collect); //按照计划进行渲染 for (int index : defaultRender) { try { cartRenderSteps.get(index).render(tradeDTO); } catch (Exception e) { - log.error("购物车渲染异常:", e); + log.error("购物车{}渲染异常:", cartRenderSteps.get(index).getClass(), e); } } + //购物车信息接受 List cartVOList = new ArrayList<>(); - for (CartVO i : tradeDTO.getCartList()) { - i.setSkuList(i.getSkuList().stream().filter(j -> Boolean.TRUE.equals(j.getChecked())).collect(Collectors.toList())); - cartVOList.add(i); + //循环购物车信息 + for (CartVO cartVO : tradeDTO.getCartList()) { + //如果商品选中,则加入到对应购物车 + cartVO.setSkuList(cartVO.getSkuList().stream().filter(j -> Boolean.TRUE.equals(j.getChecked())).collect(Collectors.toList())); + cartVOList.add(cartVO); } tradeDTO.setCartList(cartVOList); return tradeDTO; @@ -111,12 +114,10 @@ public class TradeBuilder { * 创建一笔交易 * * @param checkedWay 购物车类型 - * @param parentOrderSn 是否为其他订单下的订单,如果是则为依赖订单的sn,否则为空 * @return 交易信息 */ - public Trade createTrade(CartTypeEnum checkedWay, String parentOrderSn) { + public Trade createTrade(CartTypeEnum checkedWay) { TradeDTO tradeDTO = this.buildTrade(checkedWay); - tradeDTO.setParentOrderSn(parentOrderSn); return tradeService.createTrade(tradeDTO); } } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java index f5a5476d..29757f33 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/CheckDataRender.java @@ -1,18 +1,28 @@ package cn.lili.modules.order.cart.render.impl; +import cn.hutool.core.text.CharSequenceUtil; +import cn.lili.common.exception.ServiceException; +import cn.lili.common.security.context.UserContext; import cn.lili.common.utils.CurrencyUtil; import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; import cn.lili.modules.goods.service.GoodsSkuService; import cn.lili.modules.order.cart.entity.dto.TradeDTO; +import cn.lili.modules.order.cart.entity.enums.DeliveryMethodEnum; import cn.lili.modules.order.cart.entity.vo.CartSkuVO; +import cn.lili.modules.order.cart.entity.vo.CartVO; import cn.lili.modules.order.cart.render.CartRenderStep; -import lombok.RequiredArgsConstructor; +import cn.lili.modules.order.order.service.OrderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + /** * 商品有效性校验 * @@ -26,10 +36,31 @@ public class CheckDataRender implements CartRenderStep { @Autowired private GoodsSkuService goodsSkuService; + @Autowired + private OrderService orderService; + @Override public void render(TradeDTO tradeDTO) { + //校验商品有效性 + checkData(tradeDTO); + //店铺分组数据初始化 + groupStore(tradeDTO); + //预校验 + preCalibration(tradeDTO); + + } + + /** + * 校验商品属性 + * + * @param tradeDTO + */ + private void checkData(TradeDTO tradeDTO) { + //循环购物车中的商品 for (CartSkuVO cartSkuVO : tradeDTO.getSkuList()) { + //缓存中的商品信息 GoodsSku dataSku = goodsSkuService.getGoodsSkuByIdFromCache(cartSkuVO.getGoodsSku().getId()); + //商品有效性判定 if (dataSku == null || dataSku.getUpdateTime().before(cartSkuVO.getGoodsSku().getUpdateTime())) { //设置购物车未选中 cartSkuVO.setChecked(false); @@ -39,6 +70,7 @@ public class CheckDataRender implements CartRenderStep { cartSkuVO.setErrorMessage("商品信息发生变化,已失效"); continue; } + // 商品上架状态判定 if (!GoodsAuthEnum.PASS.name().equals(dataSku.getIsAuth()) || !GoodsStatusEnum.UPPER.name().equals(dataSku.getMarketEnable())) { //设置购物车未选中 cartSkuVO.setChecked(false); @@ -48,17 +80,59 @@ public class CheckDataRender implements CartRenderStep { cartSkuVO.setErrorMessage("商品已下架"); continue; } - //商品库存不足 - if (dataSku.getQuantity() <= 0) { + // 商品库存判定 + if (dataSku.getQuantity() < cartSkuVO.getNum()) { //设置购物车未选中 cartSkuVO.setChecked(false); - //设置购物车此sku商品已失效 - cartSkuVO.setInvalid(true); //设置失效消息 - cartSkuVO.setErrorMessage("商品库存不足"); + cartSkuVO.setErrorMessage("商品库存不足,现有库存数量[" + dataSku.getQuantity() + "]"); } //写入初始价格 cartSkuVO.getPriceDetailDTO().setGoodsPrice(CurrencyUtil.mul(cartSkuVO.getPurchasePrice(), cartSkuVO.getNum())); } } + + /** + * 店铺分组 + * + * @param tradeDTO + */ + private void groupStore(TradeDTO tradeDTO) { + // 渲染的购物车 + List cartList = new ArrayList<>(); + + // 根据店铺分组 + Map> storeCollect = tradeDTO.getSkuList().parallelStream().collect(Collectors.groupingBy(CartSkuVO::getStoreId)); + for (Map.Entry> storeCart : storeCollect.entrySet()) { + if (!storeCart.getValue().isEmpty()) { + CartVO cartVO = new CartVO(storeCart.getValue().get(0)); + if (CharSequenceUtil.isEmpty(cartVO.getDeliveryMethod())) { + cartVO.setDeliveryMethod(DeliveryMethodEnum.LOGISTICS.name()); + } + cartVO.setSkuList(storeCart.getValue()); + storeCart.getValue().stream().filter(i -> Boolean.TRUE.equals(i.getChecked())).findFirst().ifPresent(cartSkuVO -> cartVO.setChecked(true)); + cartList.add(cartVO); + } + } + tradeDTO.setCartList(cartList); + } + + /** + * 订单预校验 + * 1、自己拼团自己创建都拼团判定 + * + * @param tradeDTO + */ + private void preCalibration(TradeDTO tradeDTO) { + //拼团判定,不能参与自己创建的拼团 + if (tradeDTO.getParentOrderSn() != null) { + //订单接受 + cn.lili.modules.order.order.entity.dos.Order parentOrder = orderService.getBySn(tradeDTO.getParentOrderSn()); + //参与活动判定 + if (parentOrder.getMemberId().equals(UserContext.getCurrentUser().getId())) { + throw new ServiceException("不能参与自己发起的拼团活动!"); + } + } + } + } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/FullDiscountRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/FullDiscountRender.java index 33fa9b8c..0b728c64 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/FullDiscountRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/FullDiscountRender.java @@ -1,15 +1,12 @@ package cn.lili.modules.order.cart.render.impl; -import cn.hutool.core.text.CharSequenceUtil; import cn.lili.modules.order.cart.entity.dto.TradeDTO; -import cn.lili.modules.order.cart.entity.enums.DeliveryMethodEnum; -import cn.lili.modules.promotion.entity.dos.PromotionGoods; -import cn.lili.modules.promotion.service.FullDiscountService; import cn.lili.modules.order.cart.entity.vo.CartSkuVO; import cn.lili.modules.order.cart.entity.vo.CartVO; import cn.lili.modules.order.cart.entity.vo.FullDiscountVO; import cn.lili.modules.order.cart.render.CartRenderStep; -import lombok.RequiredArgsConstructor; +import cn.lili.modules.promotion.entity.dos.PromotionGoods; +import cn.lili.modules.promotion.service.FullDiscountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Service; @@ -38,60 +35,63 @@ public class FullDiscountRender implements CartRenderStep { // 获取购物车中所有的商品 List cartSkuList = tradeDTO.getSkuList(); - // 渲染的购物车 - List cartList = new ArrayList<>(); - - // 确定有哪些商家 + // 店铺id集合 List storeIds = new ArrayList<>(); - // 根据店铺分组 - Map> storeCollect = cartSkuList.parallelStream().collect(Collectors.groupingBy(CartSkuVO::getStoreId)); + // 店铺集合 + List cartList = tradeDTO.getCartList(); + + + // 获取店铺id + Map> storeCollect = tradeDTO.getSkuList().parallelStream().collect(Collectors.groupingBy(CartSkuVO::getStoreId)); for (Map.Entry> storeCart : storeCollect.entrySet()) { if (!storeCart.getValue().isEmpty()) { storeIds.add(storeCart.getKey()); - CartVO cartVO = new CartVO(storeCart.getValue().get(0)); - if (CharSequenceUtil.isEmpty(cartVO.getDeliveryMethod())) { - cartVO.setDeliveryMethod(DeliveryMethodEnum.LOGISTICS.name()); - } - cartVO.setSkuList(storeCart.getValue()); - storeCart.getValue().stream().filter(i -> Boolean.TRUE.equals(i.getChecked())).findFirst().ifPresent(cartSkuVO -> cartVO.setChecked(true)); - cartList.add(cartVO); - } } + // 获取当前店铺进行到满减活动 List fullDiscounts = fullDiscountService.currentPromotion(storeIds); + //循环满减信息 for (FullDiscountVO fullDiscount : fullDiscounts) { + //判定参与活动的商品 if (fullDiscount.getPromotionGoodsList() != null || fullDiscount.getNumber() == -1) { + //循环店铺购物车 for (CartVO cart : cartList) { + //如果购物车中的店铺id与活动店铺id相等,则进行促销计算 if (fullDiscount.getStoreId().equals(cart.getStoreId())) { + //写入满减活动 cart.setFullDiscount(fullDiscount); List skuIds; + // 参与活动的sku判定 if (fullDiscount.getNumber() != -1) { skuIds = initFullDiscountGoods(fullDiscount, cartSkuList); } else { skuIds = cart.getSkuList().stream().map(i -> i.getGoodsSku().getId()).collect(Collectors.toList()); } + //记录参与满减活动的sku cart.setFullDiscountSkuIds(skuIds); } } } } - tradeDTO.setCartList(cartList); } /** * 获取参与满优惠的商品id * * @param fullDiscount 满优惠信息 - * @param cartSkuVOS 购物车商品sku信息 + * @param cartSkuVOS 购物车商品sku信息 * @return 参与满优惠的商品id */ public List initFullDiscountGoods(FullDiscountVO fullDiscount, List cartSkuVOS) { List goodsIds = new ArrayList<>(); + //判定参与活动的商品 for (PromotionGoods promotionGoods : fullDiscount.getPromotionGoodsList()) { + //sku 集合判定 for (CartSkuVO cartSkuVO : cartSkuVOS) { + //如果参加,则记录商品sku if (cartSkuVO.getGoodsSku().getId().equals(promotionGoods.getSkuId())) { goodsIds.add(promotionGoods.getSkuId()); } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuFreightRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuFreightRender.java index b159eee0..633e700b 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuFreightRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuFreightRender.java @@ -1,6 +1,8 @@ package cn.lili.modules.order.cart.render.impl; import cn.hutool.core.util.NumberUtil; +import cn.lili.common.enums.ResultCode; +import cn.lili.common.exception.ServiceException; import cn.lili.common.utils.CurrencyUtil; import cn.lili.modules.member.entity.dos.MemberAddress; import cn.lili.modules.order.cart.entity.dto.TradeDTO; @@ -36,24 +38,24 @@ public class SkuFreightRender implements CartRenderStep { List cartSkuVOS = tradeDTO.getSkuList(); //会员收货地址问题处理 MemberAddress memberAddress = tradeDTO.getMemberAddress(); + //如果收货地址为空,则抛出异常 if (memberAddress == null) { - return; + throw new ServiceException(ResultCode.MEMBER_ADDRESS_NOT_EXIST); } //循环渲染购物车商品运费价格 forSku: for (CartSkuVO cartSkuVO : cartSkuVOS) { + //获取sku运费模版 String freightTemplateId = cartSkuVO.getGoodsSku().getFreightTemplateId(); - //免运费则跳出运费计算 if (Boolean.TRUE.equals(cartSkuVO.getIsFreeFreight()) || freightTemplateId == null) { continue; } - //寻找对应对商品运费计算模版 FreightTemplateVO freightTemplate = freightTemplateService.getFreightTemplate(freightTemplateId); if (freightTemplate != null && freightTemplate.getFreightTemplateChildList() != null && !freightTemplate.getFreightTemplateChildList().isEmpty()) { //店铺支付运费则跳过 - if(freightTemplate.getPricingMethod().equals(FreightTemplateEnum.FREE.name())){ + if (freightTemplate.getPricingMethod().equals(FreightTemplateEnum.FREE.name())) { break; } FreightTemplateChild freightTemplateChild = null; @@ -68,7 +70,7 @@ public class SkuFreightRender implements CartRenderStep { break; } } - + //如果没有匹配到物流规则,则说明不支持配送 if (freightTemplateChild == null) { if (tradeDTO.getNotSupportFreight() == null) { tradeDTO.setNotSupportFreight(new ArrayList<>()); @@ -77,6 +79,7 @@ public class SkuFreightRender implements CartRenderStep { continue forSku; } + //物流规则模型创立 FreightTemplateChildDTO freightTemplateChildDTO = new FreightTemplateChildDTO(freightTemplateChild); freightTemplateChildDTO.setPricingMethod(freightTemplate.getPricingMethod()); diff --git a/framework/src/main/java/cn/lili/modules/order/cart/service/CartService.java b/framework/src/main/java/cn/lili/modules/order/cart/service/CartService.java index 09531030..2d997b3f 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/service/CartService.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/service/CartService.java @@ -1,16 +1,12 @@ package cn.lili.modules.order.cart.service; -import cn.lili.modules.member.entity.dos.MemberAddress; import cn.lili.modules.order.cart.entity.dto.TradeDTO; import cn.lili.modules.order.cart.entity.enums.CartTypeEnum; -import cn.lili.modules.order.cart.entity.vo.CartSkuVO; import cn.lili.modules.order.cart.entity.vo.TradeParams; import cn.lili.modules.order.order.entity.dos.Trade; import cn.lili.modules.order.order.entity.vo.ReceiptVO; -import java.util.List; - /** * 购物车业务层 * @@ -171,13 +167,4 @@ public interface CartService { * @return 交易信息 */ Trade createTrade(TradeParams tradeParams); - - /** - * 检查商品是否在配送范围 - * - * @param skuList 商品列表 - * @param memberAddress 配送地址 - */ - void checkAddressScope(List skuList, MemberAddress memberAddress); - } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java index b14d949c..c317dfe1 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java @@ -10,7 +10,6 @@ import cn.lili.common.utils.CurrencyUtil; import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; import cn.lili.modules.goods.entity.enums.GoodsStatusEnum; -import cn.lili.modules.goods.entity.enums.GoodsTypeEnum; import cn.lili.modules.goods.service.GoodsSkuService; import cn.lili.modules.member.entity.dos.MemberAddress; import cn.lili.modules.order.cart.entity.dto.MemberCouponDTO; @@ -25,19 +24,17 @@ import cn.lili.modules.order.cart.render.TradeBuilder; import cn.lili.modules.order.order.entity.dos.Trade; import cn.lili.modules.order.order.entity.vo.ReceiptVO; import cn.lili.modules.promotion.entity.dos.MemberCoupon; +import cn.lili.modules.promotion.entity.dos.Pintuan; import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.enums.CouponScopeTypeEnum; import cn.lili.modules.promotion.entity.enums.MemberCouponStatusEnum; import cn.lili.modules.promotion.entity.enums.PromotionTypeEnum; import cn.lili.modules.promotion.service.MemberAddressService; import cn.lili.modules.promotion.service.MemberCouponService; +import cn.lili.modules.promotion.service.PintuanService; import cn.lili.modules.promotion.service.PromotionGoodsService; import cn.lili.modules.search.entity.dos.EsGoodsIndex; import cn.lili.modules.search.service.EsGoodsSearchService; -import cn.lili.modules.store.entity.dos.FreightTemplateChild; -import cn.lili.modules.store.entity.enums.FreightTemplateEnum; -import cn.lili.modules.store.entity.vos.FreightTemplateVO; -import cn.lili.modules.store.service.FreightTemplateService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -79,9 +76,10 @@ public class CartServiceImpl implements CartService { //ES商品 @Autowired private EsGoodsSearchService esGoodsSearchService; - //运费模板 + + //拼团服务 @Autowired - private FreightTemplateService freightTemplateService; + private PintuanService pintuanService; //交易 @Autowired private TradeBuilder tradeBuilder; @@ -136,10 +134,16 @@ public class CartServiceImpl implements CartService { promotionGoodsService.updatePromotion(cartSkuVO); //再设置加入购物车的数量 this.checkSetGoodsQuantity(cartSkuVO, skuId, num); + + //拼团判定 + checkPintuan(cartTypeEnum, cartSkuVO); + //计算购物车小计 cartSkuVO.setSubTotal(CurrencyUtil.mul(cartSkuVO.getPurchasePrice(), cartSkuVO.getNum())); cartSkuVOS.add(cartSkuVO); } + + tradeDTO.setCartTypeEnum(cartTypeEnum); // 如购物车发生更改,则重置优惠券 tradeDTO.setStoreCoupons(null); @@ -501,61 +505,15 @@ public class CartServiceImpl implements CartService { //设置基础属性 tradeDTO.setClientType(tradeParams.getClient()); tradeDTO.setStoreRemark(tradeParams.getRemark()); - //过滤勾选商品 - List collect = tradeDTO.getSkuList().parallelStream().filter(i -> Boolean.TRUE.equals(i.getChecked())).collect(Collectors.toList()); - //校验收获地址 - MemberAddress memberAddress = tradeDTO.getMemberAddress(); - this.checkAddressScope(collect, memberAddress); + tradeDTO.setParentOrderSn(tradeParams.getParentOrderSn()); + //将购物车信息写入缓存,后续逻辑调用校验 this.resetTradeDTO(tradeDTO); //构建交易 - Trade trade = tradeBuilder.createTrade(cartTypeEnum, tradeParams.getParentOrderSn()); + Trade trade = tradeBuilder.createTrade(cartTypeEnum); this.cleanChecked(tradeDTO); return trade; } - /** - * 检查商品是否在配送范围 - * - * @param skuList 商品列表 - * @param memberAddress 配送地址 - */ - @Override - public void checkAddressScope(List skuList, MemberAddress memberAddress) { - //如果收货地址为空,则抛出异常 - if (memberAddress == null) { - throw new ServiceException(ResultCode.MEMBER_ADDRESS_NOT_EXIST); - } - //循环购物车列表计算运费 - for (CartSkuVO cartSkuVO : skuList) { - GoodsSku goodsSku = cartSkuVO.getGoodsSku(); - //如果是虚拟商品无需运费 - if (goodsSku.getGoodsType() != null && goodsSku.getGoodsType().equals(GoodsTypeEnum.VIRTUAL_GOODS.name())) { - break; - } - //获取运费模板ID - String freightTemplateId = cartSkuVO.getGoodsSku().getFreightTemplateId(); - FreightTemplateVO freightTemplate = freightTemplateService.getFreightTemplate(freightTemplateId); - //店铺支付运费则跳过 - if (freightTemplate.getPricingMethod().equals(FreightTemplateEnum.FREE.name())) { - break; - } - //收货地址判定 - forTemplates: - if (freightTemplate != null && freightTemplate.getFreightTemplateChildList() != null && !freightTemplate.getFreightTemplateChildList().isEmpty()) { - //获取市级别id - String addressId = memberAddress.getConsigneeAddressIdPath().split(",")[1]; - //获取匹配的收货地址 - for (FreightTemplateChild templateChild : freightTemplate.getFreightTemplateChildList()) { - //如果当前模版包含,则返回 - if (templateChild.getAreaId().contains(addressId)) { - break forTemplates; - } - } - throw new ServiceException(ResultCode.SHIPPING_NOT_APPLY, cartSkuVO.getGoodsSku().getGoodsName()); - - } - } - } /** * 获取购物车类型 @@ -576,6 +534,13 @@ public class CartServiceImpl implements CartService { return cartTypeEnum; } + /** + * 使用优惠券判定 + * + * @param tradeDTO 交易对象 + * @param memberCoupon 会员优惠券 + * @param cartTypeEnum 购物车 + */ private void useCoupon(TradeDTO tradeDTO, MemberCoupon memberCoupon, CartTypeEnum cartTypeEnum) { //如果是平台优惠券 if (Boolean.TRUE.equals(memberCoupon.getIsPlatform())) { @@ -583,24 +548,34 @@ public class CartServiceImpl implements CartService { Double cartPrice = 0d; for (CartSkuVO cartSkuVO : tradeDTO.getSkuList()) { // 获取商品的促销信息 - Optional promotionOptional = cartSkuVO.getPromotions().parallelStream().filter(i -> (i.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name()) && cartTypeEnum.equals(CartTypeEnum.PINTUAN)) - || i.getPromotionType().equals(PromotionTypeEnum.SECKILL.name())).findAny(); + Optional promotionOptional = + cartSkuVO.getPromotions().parallelStream().filter(promotionGoods -> + (promotionGoods.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name()) && + cartTypeEnum.equals(CartTypeEnum.PINTUAN)) || + promotionGoods.getPromotionType().equals(PromotionTypeEnum.SECKILL.name())).findAny(); + //有促销金额则用促销金额,否则用商品原价 if (promotionOptional.isPresent()) { - cartPrice += CurrencyUtil.mul(promotionOptional.get().getPrice(), cartSkuVO.getNum()); + cartPrice = CurrencyUtil.add(cartPrice, CurrencyUtil.mul(promotionOptional.get().getPrice(), cartSkuVO.getNum())); } else { - cartPrice += CurrencyUtil.mul(cartSkuVO.getGoodsSku().getPrice(), cartSkuVO.getNum()); + cartPrice = CurrencyUtil.add(cartPrice, CurrencyUtil.mul(cartSkuVO.getGoodsSku().getPrice(), cartSkuVO.getNum())); } } + //如果购物车金额大于消费门槛则使用 if (memberCoupon.getConsumeThreshold() <= cartPrice) { tradeDTO.setPlatformCoupon(new MemberCouponDTO(memberCoupon)); + //选择平台优惠券,则将品台优惠券清空 tradeDTO.setStoreCoupons(new HashMap<>()); } - } else { + } + //否则为店铺优惠券 + else { + //过滤对应店铺购物车 CartSkuVO cartVO = tradeDTO.getSkuList().stream().filter(i -> i.getStoreId().equals(memberCoupon.getStoreId())).findFirst().orElse(null); // 优惠券消费门槛 <= 商品购买时的成交价(单品) * 购买数量 if (cartVO != null && memberCoupon.getConsumeThreshold() <= CurrencyUtil.mul(cartVO.getPurchasePrice(), cartVO.getNum())) { tradeDTO.getStoreCoupons().put(memberCoupon.getStoreId(), new MemberCouponDTO(memberCoupon)); + //选择店铺优惠券,则将品台优惠券清空 tradeDTO.setPlatformCoupon(null); } } @@ -615,9 +590,12 @@ public class CartServiceImpl implements CartService { */ private boolean checkCoupon(MemberCoupon memberCoupon, TradeDTO tradeDTO) { List cartSkuVOS; + //如果是店铺优惠券,判定的内容 if (Boolean.FALSE.equals(memberCoupon.getIsPlatform())) { cartSkuVOS = tradeDTO.getSkuList().stream().filter(i -> i.getStoreId().equals(memberCoupon.getStoreId())).collect(Collectors.toList()); - } else { + } + //否则为平台优惠券,筛选商品为全部商品 + else { cartSkuVOS = tradeDTO.getSkuList(); } @@ -635,8 +613,33 @@ public class CartServiceImpl implements CartService { return true; } - @Autowired - public void setTradeBuilder(TradeBuilder tradeBuilder) { - this.tradeBuilder = tradeBuilder; + /** + * 校验拼团信息 + * + * @param cartTypeEnum 购物车枚举 + * @param cartSkuVO 购物车信息 + */ + private void checkPintuan(CartTypeEnum cartTypeEnum, CartSkuVO cartSkuVO) { + + //拼团活动的话,需要对限购数量进行判定 + if (cartTypeEnum.equals(CartTypeEnum.PINTUAN)) { + //获取拼团信息 + List currentPromotion = cartSkuVO.getPromotions().stream().filter( + promotionGoods -> (promotionGoods.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name()))) + .collect(Collectors.toList()); + //拼团活动判定 + if (currentPromotion.size() > 0) { + //写入拼团信息 + cartSkuVO.setPintuanId(currentPromotion.get(0).getPromotionId()); + } else { + throw new ServiceException(ResultCode.CART_PINTUAN_NOT_EXIST_ERROR); + } + + Pintuan pintuan = pintuanService.getPintuanById(cartSkuVO.getPintuanId()); + Integer limitNum = pintuan.getLimitNum(); + if (limitNum != 0 && cartSkuVO.getNum() > limitNum) { + throw new ServiceException(ResultCode.CART_PINTUAN_LIMIT_ERROR); + } + } } } diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index cda73774..5a4a7503 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -134,35 +134,26 @@ public class OrderServiceImpl extends ServiceImpl implements //存放自订单/订单日志 List orderItems = new ArrayList<>(); List orderLogs = new ArrayList<>(); - //拼团判定,不能参与自己创建的拼团 - if (tradeDTO.getParentOrderSn() != null) { - Order parentOrder = this.getBySn(tradeDTO.getParentOrderSn()); - if (parentOrder.getMemberId().equals(UserContext.getCurrentUser().getId())) { - throw new ServiceException("不能参与自己发起的拼团活动!"); - } - } + //订单集合 List orderVOS = new ArrayList<>(); - //循环购物车商品集合 + //循环购物车 tradeDTO.getCartList().forEach(item -> { Order order = new Order(item, tradeDTO); - if (OrderTypeEnum.PINTUAN.name().equals(order.getOrderType())) { - Pintuan pintuan = pintuanService.getPintuanById(order.getPromotionId()); - Integer limitNum = pintuan.getLimitNum(); - if (limitNum != 0 && order.getGoodsNum() > limitNum) { - throw new ServiceException("购买数量超过拼团活动限制数量"); - } - } //构建orderVO对象 OrderVO orderVO = new OrderVO(); BeanUtil.copyProperties(order, orderVO); + //持久化DO orders.add(order); String message = "订单[" + item.getSn() + "]创建"; + //记录日志 orderLogs.add(new OrderLog(item.getSn(), UserContext.getCurrentUser().getId(), UserContext.getCurrentUser().getRole().getRole(), UserContext.getCurrentUser().getUsername(), message)); item.getSkuList().forEach( sku -> orderItems.add(new OrderItem(sku, item, tradeDTO)) ); + //写入子订单信息 orderVO.setOrderItems(orderItems); + //orderVO 记录 orderVOS.add(orderVO); }); tradeDTO.setOrderVO(orderVOS); From 337775013ef820ff357dde9e0ae5b2dd4a59d629 Mon Sep 17 00:00:00 2001 From: paulGao Date: Mon, 21 Jun 2021 14:02:31 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8B=BC=E5=9B=A2?= =?UTF-8?q?=E5=95=86=E5=93=81=E9=99=90=E8=B4=AD=E6=95=B0=E9=87=8F=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=88=9B=E5=BB=BA=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=B5=81=E7=A8=8B=E8=BF=87=E5=90=8E=E6=B8=85=E9=99=A4?= =?UTF-8?q?=E7=BC=93=E5=AD=98key?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lili/controller/trade/CartController.java | 26 ++++++++++++++----- .../lili/listener/OrderMessageListener.java | 7 +++++ .../cart/render/impl/SkuPromotionRender.java | 25 ++++++++++++++++++ .../order/cart/service/CartServiceImpl.java | 18 ++++++++----- .../order/serviceimpl/OrderServiceImpl.java | 8 +++--- 5 files changed, 67 insertions(+), 17 deletions(-) diff --git a/buyer-api/src/main/java/cn/lili/controller/trade/CartController.java b/buyer-api/src/main/java/cn/lili/controller/trade/CartController.java index fce86afd..b5ffaeea 100644 --- a/buyer-api/src/main/java/cn/lili/controller/trade/CartController.java +++ b/buyer-api/src/main/java/cn/lili/controller/trade/CartController.java @@ -50,8 +50,17 @@ public class CartController { public ResultMessage add(@NotNull(message = "产品id不能为空") String skuId, @NotNull(message = "购买数量不能为空") @Min(value = 1, message = "加入购物车数量必须大于0") Integer num, String cartType) { - cartService.add(skuId, num, cartType); - return ResultUtil.success(); + try { + // 读取选中的列表 + cartService.add(skuId, num, cartType); + return ResultUtil.success(); + } catch (ServiceException se) { + log.error(se.getMsg(), se); + return ResultUtil.error(se.getResultCode().code(), se.getResultCode().message()); + } catch (Exception e) { + log.error(ResultCode.CART_ERROR.message(), e); + throw new ServiceException(ResultCode.CART_ERROR); + } } @@ -150,8 +159,9 @@ public class CartController { try { // 读取选中的列表 return ResultUtil.data(this.cartService.getCheckedTradeDTO(CartTypeEnum.valueOf(way))); - } catch (ServiceException e) { - throw e; + } catch (ServiceException se) { + log.error(se.getMsg(), se); + return ResultUtil.error(se.getResultCode().code(), se.getResultCode().message()); } catch (Exception e) { log.error(ResultCode.CART_ERROR.message(), e); throw new ServiceException(ResultCode.CART_ERROR); @@ -193,6 +203,9 @@ public class CartController { try { cartService.shippingMethod(selleId, shippingMethod, way); return ResultUtil.success(); + } catch (ServiceException se) { + log.error(se.getMsg(), se); + return ResultUtil.error(se.getResultCode().code(), se.getResultCode().message()); } catch (Exception e) { log.error(ResultCode.CART_ERROR.message(), e); throw new ServiceException(ResultCode.CART_ERROR); @@ -228,8 +241,9 @@ public class CartController { try { // 读取选中的列表 return ResultUtil.data(this.cartService.createTrade(tradeParams)); - } catch (ServiceException e) { - throw e; + } catch (ServiceException se) { + log.error(se.getMsg(), se); + return ResultUtil.error(se.getResultCode().code(), se.getResultCode().message()); } catch (Exception e) { log.error(ResultCode.ORDER_ERROR.message(), e); throw new ServiceException(ResultCode.ORDER_ERROR); diff --git a/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java b/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java index 02371a0d..dfbb0c2f 100644 --- a/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java @@ -44,6 +44,7 @@ public class OrderMessageListener implements RocketMQListener { case ORDER_CREATE: String key = new String(messageExt.getBody()); TradeDTO tradeDTO = (TradeDTO) cache.get(key); + boolean result = true; for (TradeEvent event : tradeEvent) { try { event.orderCreate(tradeDTO); @@ -52,8 +53,14 @@ public class OrderMessageListener implements RocketMQListener { tradeDTO.getSn(), event.getClass().getName(), e); + result = false; } } + // 如所有步骤顺利完成 + if (Boolean.TRUE.equals(result)) { + // 清除记录信息的trade cache key + cache.remove(key); + } break; //订单状态变更 case STATUS_CHANGE: diff --git a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java index c2683cc8..d2fa9eba 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/render/impl/SkuPromotionRender.java @@ -1,6 +1,7 @@ package cn.lili.modules.order.cart.render.impl; import cn.hutool.core.date.DateUtil; +import cn.lili.common.exception.ServiceException; import cn.lili.common.utils.CurrencyUtil; import cn.lili.common.utils.StringUtils; import cn.lili.modules.order.cart.entity.dto.MemberCouponDTO; @@ -13,10 +14,14 @@ import cn.lili.modules.order.cart.entity.vo.PriceDetailVO; import cn.lili.modules.order.cart.render.CartRenderStep; import cn.lili.modules.order.order.entity.dto.PriceDetailDTO; import cn.lili.modules.promotion.entity.dos.MemberCoupon; +import cn.lili.modules.promotion.entity.dos.Pintuan; +import cn.lili.modules.promotion.entity.dos.PromotionGoods; import cn.lili.modules.promotion.entity.dto.GoodsSkuPromotionPriceDTO; import cn.lili.modules.promotion.entity.dto.PromotionPriceDTO; import cn.lili.modules.promotion.entity.dto.PromotionPriceParamDTO; import cn.lili.modules.promotion.entity.dto.StorePromotionPriceDTO; +import cn.lili.modules.promotion.entity.enums.PromotionTypeEnum; +import cn.lili.modules.promotion.service.PintuanService; import cn.lili.modules.promotion.service.PromotionGoodsService; import cn.lili.modules.promotion.service.PromotionPriceService; import org.springframework.beans.factory.annotation.Autowired; @@ -45,12 +50,16 @@ public class SkuPromotionRender implements CartRenderStep { @Autowired private PromotionGoodsService promotionGoodsService; + @Autowired + private PintuanService pintuanService; + @Override public void render(TradeDTO tradeDTO) { //主要渲染各个优惠的价格 this.renderSkuPromotion(tradeDTO); + this.checkPromotionLimit(tradeDTO); } @@ -289,4 +298,20 @@ public class SkuPromotionRender implements CartRenderStep { } return false; } + + private void checkPromotionLimit(TradeDTO tradeDTO) { + if (tradeDTO.getCartTypeEnum().equals(CartTypeEnum.PINTUAN)) { + // 如果为拼团订单,则获取拼团活动ID + Optional pintuanId = tradeDTO.getSkuList().get(0).getPromotions().stream().filter(i -> i.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name())).map(PromotionGoods::getPromotionId).findFirst(); + if (pintuanId.isPresent()) { + Pintuan pintuan = pintuanService.getPintuanById(pintuanId.get()); + Integer limitNum = pintuan.getLimitNum(); + for (CartSkuVO cartSkuVO : tradeDTO.getSkuList()) { + if (limitNum != 0 && cartSkuVO.getNum() > limitNum) { + throw new ServiceException("购买数量超过拼团活动限制数量"); + } + } + } + } + } } diff --git a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java index c317dfe1..4f334cd1 100644 --- a/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/cart/service/CartServiceImpl.java @@ -149,6 +149,8 @@ public class CartServiceImpl implements CartService { tradeDTO.setStoreCoupons(null); tradeDTO.setPlatformCoupon(null); this.resetTradeDTO(tradeDTO); + } catch (ServiceException se) { + throw se; } catch (Exception e) { log.error("购物车渲染异常", e); throw new ServiceException(errorMessage); @@ -324,14 +326,16 @@ public class CartServiceImpl implements CartService { List storeIds = new ArrayList<>(); List esGoodsList = esGoodsSearchService.getEsGoodsBySkuIds(ids); for (EsGoodsIndex esGoodsIndex : esGoodsList) { - if (esGoodsIndex.getPromotionMap() != null) { - List couponIds = esGoodsIndex.getPromotionMap().keySet().parallelStream().filter(i -> i.contains(PromotionTypeEnum.COUPON.name())).map(i -> i.substring(i.lastIndexOf("-") + 1)).collect(Collectors.toList()); - if (!couponIds.isEmpty()) { - List currentGoodsCanUse = memberCouponService.getCurrentGoodsCanUse(tradeDTO.getMemberId(), couponIds, totalPrice); - count = currentGoodsCanUse.size(); + if (esGoodsIndex != null) { + if (esGoodsIndex.getPromotionMap() != null) { + List couponIds = esGoodsIndex.getPromotionMap().keySet().parallelStream().filter(i -> i.contains(PromotionTypeEnum.COUPON.name())).map(i -> i.substring(i.lastIndexOf("-") + 1)).collect(Collectors.toList()); + if (!couponIds.isEmpty()) { + List currentGoodsCanUse = memberCouponService.getCurrentGoodsCanUse(tradeDTO.getMemberId(), couponIds, totalPrice); + count = currentGoodsCanUse.size(); + } } + storeIds.add(esGoodsIndex.getStoreId()); } - storeIds.add(esGoodsIndex.getStoreId()); } List allScopeMemberCoupon = memberCouponService.getAllScopeMemberCoupon(tradeDTO.getMemberId(), storeIds); if (allScopeMemberCoupon != null && !allScopeMemberCoupon.isEmpty()) { @@ -628,7 +632,7 @@ public class CartServiceImpl implements CartService { promotionGoods -> (promotionGoods.getPromotionType().equals(PromotionTypeEnum.PINTUAN.name()))) .collect(Collectors.toList()); //拼团活动判定 - if (currentPromotion.size() > 0) { + if (!currentPromotion.isEmpty()) { //写入拼团信息 cartSkuVO.setPintuanId(currentPromotion.get(0).getPromotionId()); } else { diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java index 5a4a7503..32f86ed5 100644 --- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java @@ -672,10 +672,10 @@ public class OrderServiceImpl extends ServiceImpl implements * @param list 需要更新拼团状态为成功的拼团订单列表 */ private void pintuanOrderSuccess(List list) { - list.stream().forEach(order -> { - if (order.getOrderType().equals(OrderTypeEnum.VIRTUAL)) { + list.forEach(order -> { + if (order.getOrderType().equals(OrderTypeEnum.VIRTUAL.name())) { this.virtualOrderConfirm(order.getSn()); - } else if (order.getOrderType().equals(OrderTypeEnum.NORMAL)) { + } else if (order.getOrderType().equals(OrderTypeEnum.NORMAL.name())) { this.normalOrderConfirm(order.getSn()); } }); @@ -793,7 +793,7 @@ public class OrderServiceImpl extends ServiceImpl implements */ private void checkOrder(Order order) { //订单类型为拼团订单,检测购买数量是否超过了限购数量 - if (OrderPromotionTypeEnum.PINTUAN.name().equals(order.getOrderPromotionType())) { + if (OrderPromotionTypeEnum.PINTUAN.name().equals(order.getOrderType())) { Pintuan pintuan = pintuanService.getPintuanById(order.getPromotionId()); Integer limitNum = pintuan.getLimitNum(); if (limitNum != 0 && order.getGoodsNum() > limitNum) { From c7e4af6175a376f537f8d23f23e14c9b1dc34129 Mon Sep 17 00:00:00 2001 From: Chopper Date: Mon, 21 Jun 2021 14:14:07 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/lili/admin/AdminApplication.java | 6 +- .../lili/controller/trade/CartController.java | 8 +- .../security/BuyerAuthenticationFilter.java | 4 +- .../cn/lili/security/BuyerSecurityConfig.java | 18 +-- .../cn/lili/buyer/test/cart/CartTest.java | 6 +- .../cn/lili/buyer/test/cart/FileTest.java | 2 +- .../controller/common/UploadController.java | 6 +- .../security/CommonSecurityConfig.java | 10 +- .../lili/event/impl/StockUpdateExecute.java | 4 +- .../lili/listener/GoodsMessageListener.java | 4 +- .../lili/listener/OrderMessageListener.java | 4 +- .../impl/order/CancelOrderTaskExecute.java | 4 +- .../impl/order/OrderEveryDayTaskExecute.java | 8 +- .../promotion/PromotionEverydayExecute.java | 4 +- .../trigger/AbstractDelayQueueListen.java | 14 +- .../BroadcastTimeTriggerExecutor.java | 2 +- .../PromotionTimeTriggerExecutor.java | 10 +- .../base/mybatisplus/MybatisPlusConfig.java | 12 +- .../common/aop/limiter/LimitInterceptor.java | 2 +- .../syslog/interceptor/SystemLogAspect.java | 2 +- .../cn/lili/common/cache/impl/RedisCache.java | 8 +- .../BaseElasticsearchService.java | 16 +- .../GlobalControllerExceptionHandler.java | 36 ++--- .../filter/XssHttpServletRequestWrapper.java | 24 +-- .../sms/impl/SmsUtilAliImplService.java | 10 +- .../java/cn/lili/common/token/TokenUtil.java | 10 +- .../base/generate/ManagerTokenGenerate.java | 2 +- .../base/generate/MemberTokenGenerate.java | 2 +- .../base/generate/StoreTokenGenerate.java | 2 +- .../utils/Base64DecodeMultipartFile.java | 2 +- .../cn/lili/common/utils/CheckMobileUtil.java | 8 +- .../java/cn/lili/common/utils/DateUtil.java | 10 +- .../utils/HibernateProxyTypeAdapter.java | 8 +- .../cn/lili/common/utils/HttpClientUtils.java | 70 ++++----- .../java/cn/lili/common/utils/PageUtil.java | 2 +- .../cn/lili/common/utils/PasswordUtil.java | 6 +- .../java/cn/lili/common/utils/SpelUtil.java | 16 +- .../lili/common/verification/ImageUtil.java | 24 +-- .../common/verification/SliderImageUtil.java | 30 ++-- .../service/impl/VerificationServiceImpl.java | 12 +- .../cn/lili/config/cache/RedisConfig.java | 18 +-- .../elasticsearch/ElasticsearchConfig.java | 6 +- .../config/interceptor/UrlConfiguration.java | 8 +- .../CreateTimeShardingTableAlgorithmBak.java | 6 +- .../lili/config/swagger/Swagger2Config.java | 28 ++-- .../cn/lili/config/thread/ThreadConfig.java | 10 +- .../websocket/WebSocketStompConfig.java | 8 +- .../java/cn/lili/generator/CodeGenerator.java | 18 +-- .../base/serviceimpl/RegionServiceImpl.java | 38 ++--- .../broadcast/entity/dos/Commodity.java | 4 +- .../broadcast/entity/dto/GoodsInfo.java | 4 +- .../serviceimpl/StudioServiceImpl.java | 6 +- .../broadcast/util/WechatLivePlayerUtil.java | 42 ++--- .../connect/request/AuthDefaultRequest.java | 10 +- .../connect/request/AuthWeiboRequest.java | 2 +- .../serviceimpl/ConnectServiceImpl.java | 12 +- .../modules/connect/util/AuthChecker.java | 4 +- .../modules/connect/util/Base64Utils.java | 6 +- .../modules/connect/util/ConnectUtil.java | 74 ++++----- .../cn/lili/modules/connect/util/IpUtils.java | 2 +- .../DistributionOrderServiceImpl.java | 6 +- .../plugin/impl/AliFileManagerPlugin.java | 4 +- .../serviceimpl/CategoryServiceImpl.java | 10 +- .../serviceimpl/GoodsGalleryServiceImpl.java | 4 +- .../goods/serviceimpl/GoodsServiceImpl.java | 28 ++-- .../serviceimpl/GoodsSkuServiceImpl.java | 22 +-- .../MemberNoticeSenterServiceImpl.java | 2 +- .../WechatMPMessageServiceImpl.java | 2 +- .../message/util/WechatMessageUtil.java | 4 +- .../message/util/WechatMpCodeUtil.java | 32 ++-- .../cart/render/impl/CartPriceRender.java | 14 +- .../cart/render/impl/CheckDataRender.java | 8 +- .../order/cart/render/impl/CouponRender.java | 2 +- .../cart/render/impl/FullDiscountRender.java | 12 +- .../cart/render/impl/SkuFreightRender.java | 2 +- .../cart/render/impl/SkuPromotionRender.java | 32 ++-- .../order/cart/service/CartServiceImpl.java | 22 +-- .../order/order/entity/dos/AfterSale.java | 4 +- .../order/entity/dto/OrderSearchParams.java | 20 +-- .../entity/vo/AfterSaleSearchParams.java | 6 +- .../order/order/entity/vo/OrderSimpleVO.java | 2 +- .../serviceimpl/AfterSaleServiceImpl.java | 2 +- .../serviceimpl/OrderPriceServiceImpl.java | 4 +- .../order/serviceimpl/OrderServiceImpl.java | 22 +-- .../ArticleCategoryServiceImpl.java | 10 +- .../modules/payment/kit/core/XmlHelper.java | 40 ++--- .../modules/payment/kit/core/kit/IpKit.java | 8 +- .../modules/payment/kit/core/kit/PayKit.java | 10 +- .../payment/kit/core/kit/QrCodeKit.java | 2 +- .../modules/payment/kit/core/kit/RsaKit.java | 6 +- .../payment/kit/core/kit/WxPayKit.java | 24 +-- .../payment/kit/plugin/alipay/AliPayApi.java | 4 +- .../kit/plugin/alipay/AliPayPlugin.java | 4 +- .../payment/kit/plugin/wechat/WechatApi.java | 4 +- .../kit/plugin/wechat/WechatPlugin.java | 26 ++-- .../serviceimpl/AdminUserServiceImpl.java | 2 +- .../serviceimpl/CouponServiceImpl.java | 28 ++-- .../serviceimpl/FullDiscountServiceImpl.java | 52 +++---- .../serviceimpl/PintuanServiceImpl.java | 50 +++--- .../serviceimpl/PointsGoodsServiceImpl.java | 4 +- .../PromotionGoodsServiceImpl.java | 12 +- .../PromotionPriceServiceImpl.java | 112 +++++++------- .../serviceimpl/PromotionServiceImpl.java | 30 ++-- .../serviceimpl/SeckillApplyServiceImpl.java | 24 +-- .../serviceimpl/SeckillServiceImpl.java | 24 +-- .../promotion/tools/PromotionTools.java | 14 +- .../serviceimpl/EsGoodsIndexServiceImpl.java | 14 +- .../serviceimpl/EsGoodsSearchServiceImpl.java | 12 +- .../aop/aspect/PageViewInterceptor.java | 8 +- .../statistics/model/vo/OrderOverviewVO.java | 2 +- .../IndexStatisticsServiceImpl.java | 6 +- .../OrderStatisticsDataServiceImpl.java | 6 +- .../statistics/util/StatisticsDateUtil.java | 2 +- .../statistics/util/StatisticsSuffix.java | 4 +- .../lili/modules/store/entity/dos/Bill.java | 6 +- .../store/entity/dto/BillSearchParams.java | 2 +- .../store/entity/vos/StoreSearchParams.java | 2 +- .../store/serviceimpl/BillServiceImpl.java | 26 ++-- .../InstantDelivery/dada/DadaPlugin.java | 30 ++-- .../serviceimpl/LogisticsServiceImpl.java | 14 +- .../lili/modules/system/utils/HttpUtils.java | 44 +++--- .../system/utils/SensitiveWordsFilter.java | 54 +++---- .../modules/system/utils/StringPointer.java | 4 +- .../goods/CategoryManagerController.java | 4 +- .../security/ManagerAuthenticationFilter.java | 28 ++-- .../lili/security/ManagerSecurityConfig.java | 18 +-- .../cn/lili/test/elasticsearch/EsTest.java | 146 +++++++++--------- .../cn/lili/test/order/OrderServiceTest.java | 12 +- .../cn/lili/test/promotion/CouponTest.java | 32 ++-- .../lili/test/promotion/FullDiscountTest.java | 2 +- .../security/StoreAuthenticationFilter.java | 2 +- .../cn/lili/security/StoreSecurityConfig.java | 18 +-- 132 files changed, 994 insertions(+), 994 deletions(-) diff --git a/admin/src/main/java/cn/lili/admin/AdminApplication.java b/admin/src/main/java/cn/lili/admin/AdminApplication.java index d88d42e3..68c232ba 100644 --- a/admin/src/main/java/cn/lili/admin/AdminApplication.java +++ b/admin/src/main/java/cn/lili/admin/AdminApplication.java @@ -37,11 +37,11 @@ public class AdminApplication { successHandler.setDefaultTargetUrl(this.adminServer.path("/")); http.authorizeRequests().antMatchers("/instances**").permitAll(); http.authorizeRequests( - (authorizeRequests) -> authorizeRequests.antMatchers(this.adminServer.path("/assets/**")).permitAll() // 授予公众对所有静态资产和登录页面的访问权限。 + (authorizeRequests) -> authorizeRequests.antMatchers(this.adminServer.path("/assets/**")).permitAll() //授予公众对所有静态资产和登录页面的访问权限。 .antMatchers(this.adminServer.path("/login")).permitAll().anyRequest().authenticated() //其他所有请求都必须经过验证。 ).formLogin( - (formLogin) -> formLogin.loginPage(this.adminServer.path("/login")).successHandler(successHandler).and() // 配置登录和注销。 - ).logout((logout) -> logout.logoutUrl(this.adminServer.path("/logout"))).httpBasic(Customizer.withDefaults()) // 启用HTTP基本支持。这是Spring Boot Admin Client注册所必需的。 + (formLogin) -> formLogin.loginPage(this.adminServer.path("/login")).successHandler(successHandler).and() //配置登录和注销。 + ).logout((logout) -> logout.logoutUrl(this.adminServer.path("/logout"))).httpBasic(Customizer.withDefaults()) //启用HTTP基本支持。这是Spring Boot Admin Client注册所必需的。 .csrf().disable() .rememberMe((rememberMe) -> rememberMe.key(UUID.randomUUID().toString()).tokenValiditySeconds(1209600)); } diff --git a/buyer-api/src/main/java/cn/lili/controller/trade/CartController.java b/buyer-api/src/main/java/cn/lili/controller/trade/CartController.java index b5ffaeea..8150f750 100644 --- a/buyer-api/src/main/java/cn/lili/controller/trade/CartController.java +++ b/buyer-api/src/main/java/cn/lili/controller/trade/CartController.java @@ -51,11 +51,11 @@ public class CartController { @NotNull(message = "购买数量不能为空") @Min(value = 1, message = "加入购物车数量必须大于0") Integer num, String cartType) { try { - // 读取选中的列表 + //读取选中的列表 cartService.add(skuId, num, cartType); return ResultUtil.success(); } catch (ServiceException se) { - log.error(se.getMsg(), se); + log.info(se.getMsg(), se); return ResultUtil.error(se.getResultCode().code(), se.getResultCode().message()); } catch (Exception e) { log.error(ResultCode.CART_ERROR.message(), e); @@ -157,7 +157,7 @@ public class CartController { @GetMapping("/checked") public ResultMessage cartChecked(@NotNull(message = "读取选中列表") String way) { try { - // 读取选中的列表 + //读取选中的列表 return ResultUtil.data(this.cartService.getCheckedTradeDTO(CartTypeEnum.valueOf(way))); } catch (ServiceException se) { log.error(se.getMsg(), se); @@ -239,7 +239,7 @@ public class CartController { @PostMapping(value = "/create/trade", consumes = "application/json", produces = "application/json") public ResultMessage crateTrade(@RequestBody TradeParams tradeParams) { try { - // 读取选中的列表 + //读取选中的列表 return ResultUtil.data(this.cartService.createTrade(tradeParams)); } catch (ServiceException se) { log.error(se.getMsg(), se); diff --git a/buyer-api/src/main/java/cn/lili/security/BuyerAuthenticationFilter.java b/buyer-api/src/main/java/cn/lili/security/BuyerAuthenticationFilter.java index 71fddde1..2b7134af 100755 --- a/buyer-api/src/main/java/cn/lili/security/BuyerAuthenticationFilter.java +++ b/buyer-api/src/main/java/cn/lili/security/BuyerAuthenticationFilter.java @@ -67,7 +67,7 @@ public class BuyerAuthenticationFilter extends BasicAuthenticationFilter { //从header中获取jwt String jwt = request.getHeader(SecurityEnum.HEADER_TOKEN.getValue()); try { - // 如果没有token 则return + //如果没有token 则return if (StrUtil.isBlank(jwt)) { chain.doFilter(request, response); return; @@ -99,7 +99,7 @@ public class BuyerAuthenticationFilter extends BasicAuthenticationFilter { String json = claims.get(SecurityEnum.USER_CONTEXT.getValue()).toString(); AuthUser authUser = new Gson().fromJson(json, AuthUser.class); - // 校验redis中是否有权限 + //校验redis中是否有权限 if (cache.hasKey(CachePrefix.ACCESS_TOKEN.getPrefix(UserEnums.MEMBER) + jwt)) { //构造返回信息 List auths = new ArrayList<>(); diff --git a/buyer-api/src/main/java/cn/lili/security/BuyerSecurityConfig.java b/buyer-api/src/main/java/cn/lili/security/BuyerSecurityConfig.java index 81815fe9..779e0d78 100644 --- a/buyer-api/src/main/java/cn/lili/security/BuyerSecurityConfig.java +++ b/buyer-api/src/main/java/cn/lili/security/BuyerSecurityConfig.java @@ -48,35 +48,35 @@ public class BuyerSecurityConfig extends WebSecurityConfigurerAdapter { ExpressionUrlAuthorizationConfigurer.ExpressionInterceptUrlRegistry registry = http .authorizeRequests(); - // 配置的url 不需要授权 + //配置的url 不需要授权 for (String url : ignoredUrlsProperties.getUrls()) { registry.antMatchers(url).permitAll(); } registry .and() - // 禁止网页iframe + //禁止网页iframe .headers().frameOptions().disable() .and() .logout() .permitAll() .and() .authorizeRequests() - // 任何请求 + //任何请求 .anyRequest() - // 需要身份认证 + //需要身份认证 .authenticated() .and() - // 允许跨域 + //允许跨域 .cors().configurationSource((CorsConfigurationSource) SpringContextUtil.getBean("corsConfigurationSource")).and() - // 关闭跨站请求防护 + //关闭跨站请求防护 .csrf().disable() - // 前后端分离采用JWT 不需要session + //前后端分离采用JWT 不需要session .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() - // 自定义权限拒绝处理类 + //自定义权限拒绝处理类 .exceptionHandling().accessDeniedHandler(accessDeniedHandler) .and() - // 添加JWT认证过滤器 + //添加JWT认证过滤器 .addFilter(new BuyerAuthenticationFilter(authenticationManager(), cache)); } diff --git a/buyer-api/src/test/java/cn/lili/buyer/test/cart/CartTest.java b/buyer-api/src/test/java/cn/lili/buyer/test/cart/CartTest.java index 1cc333be..59f9a435 100644 --- a/buyer-api/src/test/java/cn/lili/buyer/test/cart/CartTest.java +++ b/buyer-api/src/test/java/cn/lili/buyer/test/cart/CartTest.java @@ -50,9 +50,9 @@ class CartTest { @Test void createTrade() { -// TradeDTO allTradeDTO = cartService.getAllTradeDTO(); -// Assert.assertNotNull(allTradeDTO); -// System.out.println(JsonUtil.objectToJson(allTradeDTO)); +// TradeDTO allTradeDTO = cartService.getAllTradeDTO(); +// Assert.assertNotNull(allTradeDTO); +// System.out.println(JsonUtil.objectToJson(allTradeDTO)); cartService.createTrade(new TradeParams()); } diff --git a/buyer-api/src/test/java/cn/lili/buyer/test/cart/FileTest.java b/buyer-api/src/test/java/cn/lili/buyer/test/cart/FileTest.java index 8076a648..4003ad5a 100644 --- a/buyer-api/src/test/java/cn/lili/buyer/test/cart/FileTest.java +++ b/buyer-api/src/test/java/cn/lili/buyer/test/cart/FileTest.java @@ -42,7 +42,7 @@ class FileTest { } URL url = new URL(brand.getLogo()); InputStream inputStream = url.openStream(); - // 上传至第三方云服务或服务器 + //上传至第三方云服务或服务器 brand.setLogo(fileManagerPlugin.inputStreamUpload(inputStream, brand.getId() + ".png")); } catch (IOException e) { log.error("上传你文件出错",e); diff --git a/common-api/src/main/java/cn/lili/controller/common/UploadController.java b/common-api/src/main/java/cn/lili/controller/common/UploadController.java index 7f6d05cd..d2e84495 100644 --- a/common-api/src/main/java/cn/lili/controller/common/UploadController.java +++ b/common-api/src/main/java/cn/lili/controller/common/UploadController.java @@ -73,7 +73,7 @@ public class UploadController { } if (StringUtils.isNotBlank(base64)) { - // base64上传 + //base64上传 file = Base64DecodeMultipartFile.base64Convert(base64); } String result = ""; @@ -81,9 +81,9 @@ public class UploadController { File newFile = new File(); try { InputStream inputStream = file.getInputStream(); - // 上传至第三方云服务或服务器 + //上传至第三方云服务或服务器 result = fileManagerPlugin.inputStreamUpload(inputStream, fileKey); - // 保存数据信息至数据库 + //保存数据信息至数据库 newFile.setName(file.getOriginalFilename()); newFile.setFileSize(file.getSize()); newFile.setFileType(file.getContentType()); diff --git a/common-api/src/main/java/cn/lili/controller/security/CommonSecurityConfig.java b/common-api/src/main/java/cn/lili/controller/security/CommonSecurityConfig.java index 15ba8a7c..a3cd9e4c 100644 --- a/common-api/src/main/java/cn/lili/controller/security/CommonSecurityConfig.java +++ b/common-api/src/main/java/cn/lili/controller/security/CommonSecurityConfig.java @@ -48,18 +48,18 @@ public class CommonSecurityConfig extends WebSecurityConfigurerAdapter { .authorizeRequests(); registry .and() - // 禁止网页iframe + //禁止网页iframe .headers().frameOptions().disable() .and() .authorizeRequests() - // 任何请求 + //任何请求 .anyRequest() - // 需要身份认证 + //需要身份认证 .permitAll() .and() - // 允许跨域 + //允许跨域 .cors().configurationSource(corsConfigurationSource).and() - // 关闭跨站请求防护 + //关闭跨站请求防护 .csrf().disable(); } diff --git a/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java b/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java index c8449df3..7c54b374 100644 --- a/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/StockUpdateExecute.java @@ -161,7 +161,7 @@ public class StockUpdateExecute implements OrderStatusChangeEvent { //促销库存key 集合 List promotionKey = new ArrayList<>(); - // 循环订单 + //循环订单 for (OrderItem orderItem : order.getOrderItems()) { skuKeys.add(GoodsSkuService.getStockCacheKey(orderItem.getSkuId())); GoodsSku goodsSku = new GoodsSku(); @@ -221,7 +221,7 @@ public class StockUpdateExecute implements OrderStatusChangeEvent { List goodsSkus = new ArrayList<>(); //sku库存key 集合 List skuKeys = new ArrayList<>(); - // 循环订单 + //循环订单 for (OrderItem orderItem : order.getOrderItems()) { skuKeys.add(GoodsSkuService.getStockCacheKey(orderItem.getSkuId())); GoodsSku goodsSku = new GoodsSku(); diff --git a/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java b/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java index f02719b8..fa4132d0 100644 --- a/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java @@ -112,7 +112,7 @@ public class GoodsMessageListener implements RocketMQListener { for (GoodsCompleteMessage goodsCompleteMessage : goodsCompleteMessageList) { Goods goods = goodsService.getById(goodsCompleteMessage.getGoodsId()); if (goods != null) { - // 更新商品购买数量 + //更新商品购买数量 if (goods.getBuyCount() == null) { goods.setBuyCount(0); } @@ -126,7 +126,7 @@ public class GoodsMessageListener implements RocketMQListener { } GoodsSku goodsSku = goodsSkuService.getById(goodsCompleteMessage.getSkuId()); if (goodsSku != null) { - // 更新商品购买数量 + //更新商品购买数量 if (goodsSku.getBuyCount() == null) { goodsSku.setBuyCount(0); } diff --git a/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java b/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java index dfbb0c2f..892139e5 100644 --- a/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java +++ b/consumer/src/main/java/cn/lili/listener/OrderMessageListener.java @@ -56,9 +56,9 @@ public class OrderMessageListener implements RocketMQListener { result = false; } } - // 如所有步骤顺利完成 + //如所有步骤顺利完成 if (Boolean.TRUE.equals(result)) { - // 清除记录信息的trade cache key + //清除记录信息的trade cache key cache.remove(key); } break; diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java index 82e5262a..1202c425 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/CancelOrderTaskExecute.java @@ -43,11 +43,11 @@ public class CancelOrderTaskExecute implements EveryMinuteExecute { Setting setting = settingService.get(SettingEnum.ORDER_SETTING.name()); OrderSetting orderSetting = JSONUtil.toBean(setting.getSettingValue(), OrderSetting.class); if (orderSetting != null && orderSetting.getAutoCancel() != null) { - // 订单自动取消时间 = 当前时间 - 自动取消时间分钟数 + //订单自动取消时间 = 当前时间 - 自动取消时间分钟数 DateTime cancelTime = DateUtil.offsetMinute(DateUtil.date(), -orderSetting.getAutoCancel()); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Order::getOrderStatus, OrderStatusEnum.UNPAID.name()); - // 订单创建时间 <= 订单自动取消时间 + //订单创建时间 <= 订单自动取消时间 queryWrapper.le(Order::getCreateTime, cancelTime); List list = orderService.list(queryWrapper); List cancelSnList = list.stream().map(Order::getSn).collect(Collectors.toList()); diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java index 784dee61..223489e3 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/order/OrderEveryDayTaskExecute.java @@ -73,11 +73,11 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute { * @param orderSetting 订单设置 */ private void completedOrder(OrderSetting orderSetting) { - // 订单自动收货时间 = 当前时间 - 自动收货时间天数 + //订单自动收货时间 = 当前时间 - 自动收货时间天数 DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getAutoEvaluation()); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Order::getOrderStatus, OrderStatusEnum.DELIVERED.name()); - // 订单发货时间 >= 订单自动收货时间 + //订单发货时间 >= 订单自动收货时间 queryWrapper.ge(Order::getLogisticsTime, receiveTime); List list = orderService.list(queryWrapper); List receiveSnList = list.stream().map(Order::getSn).collect(Collectors.toList()); @@ -98,9 +98,9 @@ public class OrderEveryDayTaskExecute implements EveryDayExecute { * @param orderSetting 订单设置 */ private void memberEvaluation(OrderSetting orderSetting) { - // 订单自动收货时间 = 当前时间 - 自动收货时间天数 + //订单自动收货时间 = 当前时间 - 自动收货时间天数 DateTime receiveTime = DateUtil.offsetDay(DateUtil.date(), -orderSetting.getAutoReceive()); - // 订单完成时间 <= 订单自动好评时间 + //订单完成时间 <= 订单自动好评时间 List orderItems = orderItemService.waitEvaluate(receiveTime); for (OrderItem orderItem : orderItems) { diff --git a/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java b/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java index b8f6686c..eb43758d 100644 --- a/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java +++ b/consumer/src/main/java/cn/lili/timetask/handler/impl/promotion/PromotionEverydayExecute.java @@ -61,7 +61,7 @@ public class PromotionEverydayExecute implements EveryDayExecute { @Autowired private PromotionGoodsService promotionGoodsService; - // 系统设置 + //系统设置 @Autowired private SettingService settingService; @@ -108,7 +108,7 @@ public class PromotionEverydayExecute implements EveryDayExecute { List couponVOS = mongoTemplate.find(query, CouponVO.class); if (!couponVOS.isEmpty()) { List ids = new ArrayList<>(); - // // 关闭的优惠券活动 + // //关闭的优惠券活动 for (CouponVO vo : couponVOS) { vo.setPromotionStatus(PromotionStatusEnum.END.name()); if (vo.getPromotionGoodsList() != null && !vo.getPromotionGoodsList().isEmpty()) { diff --git a/consumer/src/main/java/cn/lili/trigger/AbstractDelayQueueListen.java b/consumer/src/main/java/cn/lili/trigger/AbstractDelayQueueListen.java index 6c539183..d76fcdaa 100644 --- a/consumer/src/main/java/cn/lili/trigger/AbstractDelayQueueListen.java +++ b/consumer/src/main/java/cn/lili/trigger/AbstractDelayQueueListen.java @@ -31,23 +31,23 @@ public abstract class AbstractDelayQueueListen { private void startDelayQueueMachine() { log.info("延时队列机器{}开始运作", setDelayQueueName()); - // 监听redis队列 + //监听redis队列 while (true) { try { - // 获取当前时间的时间戳 + //获取当前时间的时间戳 long now = System.currentTimeMillis() / 1000; - // 获取当前时间前需要执行的任务列表 + //获取当前时间前需要执行的任务列表 Set tuples = cache.zRangeByScore(setDelayQueueName(), 0, now); - // 如果任务不为空 + //如果任务不为空 if (!CollectionUtils.isEmpty(tuples)) { log.info("执行任务:{}", JSONUtil.toJsonStr(tuples)); for (DefaultTypedTuple tuple : tuples) { String jobId = (String) tuple.getValue(); - // 移除缓存,如果移除成功则表示当前线程处理了延时任务,则执行延时任务 + //移除缓存,如果移除成功则表示当前线程处理了延时任务,则执行延时任务 Long num = cache.zRemove(setDelayQueueName(), jobId); - // 如果移除成功, 则执行 + //如果移除成功, 则执行 if (num > 0) { ThreadPoolUtil.execute(() -> invoke(jobId)); } @@ -57,7 +57,7 @@ public abstract class AbstractDelayQueueListen { } catch (Exception e) { log.error("处理延时任务发生异常,异常原因为{}", e.getMessage(), e); } finally { - // 间隔一秒钟搞一次 + //间隔一秒钟搞一次 try { TimeUnit.SECONDS.sleep(5L); } catch (InterruptedException e) { diff --git a/consumer/src/main/java/cn/lili/trigger/executor/BroadcastTimeTriggerExecutor.java b/consumer/src/main/java/cn/lili/trigger/executor/BroadcastTimeTriggerExecutor.java index ab42b58b..d6088916 100644 --- a/consumer/src/main/java/cn/lili/trigger/executor/BroadcastTimeTriggerExecutor.java +++ b/consumer/src/main/java/cn/lili/trigger/executor/BroadcastTimeTriggerExecutor.java @@ -29,7 +29,7 @@ public class BroadcastTimeTriggerExecutor implements TimeTriggerExecutor { BroadcastMessage broadcastMessage = JSONUtil.toBean(JSONUtil.parseObj(object), BroadcastMessage.class); if (broadcastMessage != null && broadcastMessage.getStudioId() != null) { log.info("直播间消费:{}", broadcastMessage); - // 修改直播间状态 + //修改直播间状态 studioService.updateStudioStatus(broadcastMessage); } } diff --git a/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java b/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java index 211c9bde..5abd9433 100644 --- a/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java +++ b/consumer/src/main/java/cn/lili/trigger/executor/PromotionTimeTriggerExecutor.java @@ -42,19 +42,19 @@ public class PromotionTimeTriggerExecutor implements TimeTriggerExecutor { @Override public void execute(Object object) { PromotionMessage promotionMessage = JSONUtil.toBean(JSONUtil.parseObj(object), PromotionMessage.class); - // 促销延时信息 + //促销延时信息 if (promotionMessage != null && promotionMessage.getPromotionId() != null) { log.info("促销活动信息消费:{}", promotionMessage); - // 如果为促销活动开始,则需要发布促销活动结束的定时任务 + //如果为促销活动开始,则需要发布促销活动结束的定时任务 if (PromotionStatusEnum.START.name().equals(promotionMessage.getPromotionStatus())) { if (!promotionService.updatePromotionStatus(promotionMessage)) { log.error("开始促销活动失败: {}", promotionMessage); return; } - // 促销活动开始后,设置促销活动结束的定时任务 + //促销活动开始后,设置促销活动结束的定时任务 promotionMessage.setPromotionStatus(PromotionStatusEnum.END.name()); String uniqueKey = "{TIME_TRIGGER_" + promotionMessage.getPromotionType() + "}_" + promotionMessage.getPromotionId(); - // 结束时间(延时一分钟) + //结束时间(延时一分钟) long closeTime = promotionMessage.getEndTime().getTime() + 60000; TimeTriggerMsg timeTriggerMsg = new TimeTriggerMsg(TimeExecuteConstant.PROMOTION_EXECUTOR, closeTime, promotionMessage, uniqueKey, rocketmqCustomProperties.getPromotionTopic()); //添加延时任务 @@ -69,7 +69,7 @@ public class PromotionTimeTriggerExecutor implements TimeTriggerExecutor { PintuanOrderMessage pintuanOrderMessage = JSONUtil.toBean(JSONUtil.parseObj(object), PintuanOrderMessage.class); if (pintuanOrderMessage != null && pintuanOrderMessage.getPintuanId() != null) { log.info("拼团订单信息消费:{}", pintuanOrderMessage); - // 拼团订单自动处理 + //拼团订单自动处理 orderService.agglomeratePintuanOrder(pintuanOrderMessage.getPintuanId(), pintuanOrderMessage.getOrderSn()); } } diff --git a/framework/src/main/java/cn/lili/base/mybatisplus/MybatisPlusConfig.java b/framework/src/main/java/cn/lili/base/mybatisplus/MybatisPlusConfig.java index 1e077800..7407971c 100644 --- a/framework/src/main/java/cn/lili/base/mybatisplus/MybatisPlusConfig.java +++ b/framework/src/main/java/cn/lili/base/mybatisplus/MybatisPlusConfig.java @@ -20,12 +20,12 @@ public class MybatisPlusConfig { return new PaginationInterceptor(); //阻断解析器,测试环境使用 -// PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); +// PaginationInterceptor paginationInterceptor = new PaginationInterceptor(); // -// List sqlParserList = new ArrayList<>(); -// // 攻击 SQL 阻断解析器、加入解析链 -// sqlParserList.add(new BlockAttackSqlParser()); -// paginationInterceptor.setSqlParserList(sqlParserList); -// return paginationInterceptor; +// List sqlParserList = new ArrayList<>(); +// //攻击 SQL 阻断解析器、加入解析链 +// sqlParserList.add(new BlockAttackSqlParser()); +// paginationInterceptor.setSqlParserList(sqlParserList); +// return paginationInterceptor; } } diff --git a/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java b/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java index 4a0cf9c6..fd779456 100644 --- a/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java +++ b/framework/src/main/java/cn/lili/common/aop/limiter/LimitInterceptor.java @@ -67,7 +67,7 @@ public class LimitInterceptor { try { Number count = redisTemplate.execute(limitScript, keys, limitCount, limitPeriod); log.info("Access try count is {} for name={} and key = {}", count, name, key); - // 如果缓存里没有值,或者他的值小于限制频率 + //如果缓存里没有值,或者他的值小于限制频率 if (count.intValue() <= limitCount) { return pjp.proceed(); } else { diff --git a/framework/src/main/java/cn/lili/common/aop/syslog/interceptor/SystemLogAspect.java b/framework/src/main/java/cn/lili/common/aop/syslog/interceptor/SystemLogAspect.java index 1009fa09..ea814963 100644 --- a/framework/src/main/java/cn/lili/common/aop/syslog/interceptor/SystemLogAspect.java +++ b/framework/src/main/java/cn/lili/common/aop/syslog/interceptor/SystemLogAspect.java @@ -102,7 +102,7 @@ public class SystemLogAspect { //请求参数 systemLogVO.setMapToParams(logParams); //响应参数 此处数据太大了,所以先注释掉 -// systemLogVO.setResponseBody(JSONUtil.toJsonStr(rvt)); +// systemLogVO.setResponseBody(JSONUtil.toJsonStr(rvt)); //请求IP systemLogVO.setIp(IpUtils.getIpAddress(request)); //IP地址 diff --git a/framework/src/main/java/cn/lili/common/cache/impl/RedisCache.java b/framework/src/main/java/cn/lili/common/cache/impl/RedisCache.java index cc21e89b..85ca4838 100644 --- a/framework/src/main/java/cn/lili/common/cache/impl/RedisCache.java +++ b/framework/src/main/java/cn/lili/common/cache/impl/RedisCache.java @@ -170,7 +170,7 @@ public class RedisCache implements Cache { @Override public Long cumulative(Object key, Object value) { HyperLogLogOperations operations = redisTemplate.opsForHyperLogLog(); - // add 方法对应 PFADD 命令 + //add 方法对应 PFADD 命令 return operations.add(key, value); } @@ -179,7 +179,7 @@ public class RedisCache implements Cache { public Long counter(Object key) { HyperLogLogOperations operations = redisTemplate.opsForHyperLogLog(); - // add 方法对应 PFADD 命令 + //add 方法对应 PFADD 命令 return operations.size(key); } @@ -198,7 +198,7 @@ public class RedisCache implements Cache { @Override public Long mergeCounter(Object... key) { HyperLogLogOperations operations = redisTemplate.opsForHyperLogLog(); - // 计数器合并累加 + //计数器合并累加 return operations.union(key[0], key); } @@ -223,7 +223,7 @@ public class RedisCache implements Cache { */ @Override public void incrementScore(String sortedSetName, String keyword) { - // x 的含义请见本方法的注释 + //x 的含义请见本方法的注释 double x = 1.0; this.redisTemplate.opsForZSet().incrementScore(sortedSetName, keyword, x); } diff --git a/framework/src/main/java/cn/lili/common/elasticsearch/BaseElasticsearchService.java b/framework/src/main/java/cn/lili/common/elasticsearch/BaseElasticsearchService.java index a257a2ba..b5cbfe4e 100644 --- a/framework/src/main/java/cn/lili/common/elasticsearch/BaseElasticsearchService.java +++ b/framework/src/main/java/cn/lili/common/elasticsearch/BaseElasticsearchService.java @@ -44,7 +44,7 @@ public abstract class BaseElasticsearchService { static { RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder(); - // 默认缓冲限制为100MB,此处修改为30MB。 + //默认缓冲限制为100MB,此处修改为30MB。 builder.setHttpAsyncResponseConsumerFactory(new HttpAsyncResponseConsumerFactory.HeapBufferedResponseConsumerFactory(30 * 1024 * 1024)); COMMON_OPTIONS = builder.build(); } @@ -88,7 +88,7 @@ public abstract class BaseElasticsearchService { protected void createIndexRequest(String index) { try { CreateIndexRequest request = new CreateIndexRequest(index); - // Settings for this index + //Settings for this index request.settings(Settings.builder().put("index.number_of_shards", elasticsearchProperties.getIndex().getNumberOfShards()).put("index.number_of_replicas", elasticsearchProperties.getIndex().getNumberOfReplicas())); //创建索引 @@ -308,13 +308,13 @@ public abstract class BaseElasticsearchService { PutMappingRequest request = new PutMappingRequest(index) .source(source, XContentType.JSON); -// AcknowledgedResponse putMappingResponse = client.indices().putMapping(request, -// RequestOptions.DEFAULT); +// AcknowledgedResponse putMappingResponse = client.indices().putMapping(request, +// RequestOptions.DEFAULT); // -// boolean acknowledged = putMappingResponse.isAcknowledged(); -// if (acknowledged) { -// log.error("Succeed to put mapping"); -// } +// boolean acknowledged = putMappingResponse.isAcknowledged(); +// if (acknowledged) { +// log.error("Succeed to put mapping"); +// } CountDownLatch latch = new CountDownLatch(1); AtomicReference response = new AtomicReference(); client.indices().putMappingAsync( diff --git a/framework/src/main/java/cn/lili/common/exception/GlobalControllerExceptionHandler.java b/framework/src/main/java/cn/lili/common/exception/GlobalControllerExceptionHandler.java index abac16d0..09f4838f 100644 --- a/framework/src/main/java/cn/lili/common/exception/GlobalControllerExceptionHandler.java +++ b/framework/src/main/java/cn/lili/common/exception/GlobalControllerExceptionHandler.java @@ -67,24 +67,24 @@ public class GlobalControllerExceptionHandler { return ResultUtil.error(ResultCode.ERROR); } -// /** -// * 通用的接口映射异常处理方 -// */ -// @Override -// protected ResponseEntity handleExceptionInternal(Exception ex, Object body, HttpHeaders headers, HttpStatus status, WebRequest request) { -// if (ex instanceof MethodArgumentNotValidException) { -// MethodArgumentNotValidException exception = (MethodArgumentNotValidException) ex; -// return new ResponseEntity<>(new ResultUtil<>().setErrorMsg(exception.getBindingResult().getAllErrors().get(0).getDefaultMessage()), status); -// } -// if (ex instanceof MethodArgumentTypeMismatchException) { -// MethodArgumentTypeMismatchException exception = (MethodArgumentTypeMismatchException) ex; -// logger.error("参数转换失败,方法:" + exception.getParameter().getMethod().getName() + ",参数:" + exception.getName() -// + ",信息:" + exception.getLocalizedMessage()); -// return new ResponseEntity<>(new ResultUtil<>().setErrorMsg("参数转换失败"), status); -// } -// ex.printStackTrace(); -// return new ResponseEntity<>(new ResultUtil<>().setErrorMsg("未知异常,请联系管理员"), status); -// } +// /** +// * 通用的接口映射异常处理方 +// */ +// @Override +// protected ResponseEntity handleExceptionInternal(Exception ex, Object body, HttpHeaders headers, HttpStatus status, WebRequest request) { +// if (ex instanceof MethodArgumentNotValidException) { +// MethodArgumentNotValidException exception = (MethodArgumentNotValidException) ex; +// return new ResponseEntity<>(new ResultUtil<>().setErrorMsg(exception.getBindingResult().getAllErrors().get(0).getDefaultMessage()), status); +// } +// if (ex instanceof MethodArgumentTypeMismatchException) { +// MethodArgumentTypeMismatchException exception = (MethodArgumentTypeMismatchException) ex; +// logger.error("参数转换失败,方法:" + exception.getParameter().getMethod().getName() + ",参数:" + exception.getName() +// + ",信息:" + exception.getLocalizedMessage()); +// return new ResponseEntity<>(new ResultUtil<>().setErrorMsg("参数转换失败"), status); +// } +// ex.printStackTrace(); +// return new ResponseEntity<>(new ResultUtil<>().setErrorMsg("未知异常,请联系管理员"), status); +// } /** * bean校验未通过异常 diff --git a/framework/src/main/java/cn/lili/common/security/filter/XssHttpServletRequestWrapper.java b/framework/src/main/java/cn/lili/common/security/filter/XssHttpServletRequestWrapper.java index 990bd0a6..cdc533e4 100644 --- a/framework/src/main/java/cn/lili/common/security/filter/XssHttpServletRequestWrapper.java +++ b/framework/src/main/java/cn/lili/common/security/filter/XssHttpServletRequestWrapper.java @@ -80,7 +80,7 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { * @return */ private String cleanXSS2(String value) { - // 移除特殊标签 + //移除特殊标签 value = value.replaceAll("<", "<").replaceAll(">", ">"); value = value.replaceAll("\\(", "(").replaceAll("\\)", ")"); value = value.replaceAll("'", "'"); @@ -93,40 +93,40 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { private String cleanXSS(String value) { if (value != null) { //推荐使用ESAPI库来避免脚本攻击,value = ESAPI.encoder().canonicalize(value); -// // 避免空字符串 -// value = value.replaceAll(" ", ""); - // 避免script 标签 +// //避免空字符串 +// value = value.replaceAll(" ", ""); + //避免script 标签 Pattern scriptPattern = Pattern.compile("", Pattern.CASE_INSENSITIVE); value = scriptPattern.matcher(value).replaceAll(""); - // 避免src形式的表达式 + //避免src形式的表达式 scriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\'(.*?)\\\'", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL); value = scriptPattern.matcher(value).replaceAll(""); scriptPattern = Pattern.compile("src[\r\n]*=[\r\n]*\\\"(.*?)\\\"", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL); value = scriptPattern.matcher(value).replaceAll(""); - // 删除单个的 标签 + //删除单个的 标签 scriptPattern = Pattern.compile("", Pattern.CASE_INSENSITIVE); value = scriptPattern.matcher(value).replaceAll(""); - // 删除单个的